В следующей программе будут повторяться ~ и < < операции сходятся к отрицательному значению на всех платформах?Будут повторяться операции ~ и << сходятся к отрицательному значению на всех платформах?
#include <iostream>
int main()
{
int x{};
for(int i{}; i < 32; ++i) {
x = ~x;
x <<= 1;
std::cout << x << '\n';
}
}
Моя оценка такова, что это будет потому, что сдвиг влево не является определением реализации. Можно ли сказать, что единственный раз, когда он не будет сходиться, будет ли int
больше 32 бит?
Что подразумевается под «int i {}»? Или 'int x {}' в этом отношении? Пустой список инициализаторов для ординала, vs '= 0', который по умолчанию используется для этого типа данных? –
Левый сдвиг подписанных переменных не определен, если он переполняется. – Barmar
@DavidLively 'int i {}' означает инициализацию значения. Для целочисленного POD это означает, что он будет инициализирован 0. – wally