4

私はを持っていて、int8_tそれを8ビット以上左にシフトするとどうなるかを見たかったのです。だからこれは私がしたことです:

int8_t x = 1;

std::cout << (x << 10);

何らかの理由で、これは、型にその数を表すのに十分なビットが含まれているかのように1024を返します。与えられたビットより多くシフトすると、すべてのビットで0になると思いました(または、未定義の動作につながる符号付きオーバーフロー/アンダーフロー)。また、このコードを実行して、最大数を取得しましたint8_t

std::numeric_limits<int8_t>::max(); // 127

このタイプの最大数は127ですが、左にシフトすると、符号なしタイプよりもさらに高くなる可能性があります。これはどのように可能ですか?

4

1 に答える 1

9

の引数<<は暗黙的にに拡張されてintおり、の結果x << 10intです。

于 2013-03-24T15:08:02.323 に答える