0

次の効果は何ですか?

unsigned int x = -1; x >>= 2;

x が負の数であり、型が符号なしであるため、x が何に設定されるのかよくわかりませんか?

4

3 に答える 3

3
unsigned int x = -1;

(セクション 6.3.1.3、ポイント 2)¹ に設定xします。-1 は の初期化のために に変換さUINT_MAXれます。その変換は、ここで一度、範囲内になるまで値に加算 (またはここではなく減算) することによって行われます。intunsigned intxUINT_MAX +10 .. UINT_MAX

したがって、符号なし整数のビットごとの右シフトはセクション 6.5.7 のポイント 5 で指定されているため、 にx >>= 2;設定xされます。UINT_MAX/4

の結果E1 >> E2E1右シフトされたE2ビット位置です。符号なし型の場合E1、または符号付き型E1で負でない値の場合、結果の値は E1 / 2 E2の商の整数部分です。

¹「それ以外の場合、新しい型が符号なしの場合、値が新しい型の範囲内になるまで、新しい型で表現できる最大値よりも 1 多い値を繰り返し加算または減算することによって、値が変換されます。」

于 2012-05-02T10:55:13.963 に答える
1

-1 は、unsigned int を 0xffffffff に設定する必要があります。これは、その型の最大数 (約 48 億) です。int が 32 ビットを超える場合は、それよりもはるかに高くなります。

于 2012-05-02T10:56:02.707 に答える
1

これは、符号付きの負の値で初期化された符号なしの型です。シフトは、符号なしの値に対しても実行されます。

于 2012-05-02T10:57:15.180 に答える