次のプログラムでは〜と< <の演算がすべてのプラットフォームで負の値に収束しますか?繰り返される〜と<<操作は、すべてのプラットフォームで負の値に収束しますか?
#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