0

Cでは、32ビットマシンで、与えられた1>>31戻り値が符号付き整数であるかどうか疑問に思っていました.2の補数の場合、右シフト(算術)を実行しているときに符号ビットがコピーされ、結果が得られます-11

1111 1111 1111 1111 1111 1111 1111 1111

4

4 に答える 4

2

いいえ、適合する実装では結果はゼロになります。

C99、6.5.7/5 (「ビット単位のシフト演算子」) は次のように述べています。

E1 >> E2 の結果は、E1 を右シフトした E2 ビット位置です。E1 が unsigned 型の場合、または E1 が signed 型で負でない値の場合、結果の値は E1 / 2^E2 の商の整数部分です。E1 に符号付きの型と負の値がある場合、結果の値は実装定義です。

は非負であるため、結果は明らかにゼロである1積分商になります。1 / (2^31)

于 2012-10-04T22:04:02.727 に答える
2

符号ビット (最上位ビット) は整数 1 に対して 0 であるため、結果はゼロになります。

0000 0000 0000 0000 0000 0000 0000 0001
^
于 2012-10-04T22:05:06.793 に答える
0

1の符号ビットが0であるため、の結果1>>31はゼロです。

ただし、K&R Second Editionによると、結果は符号付きの値の右シフトに対して実装定義されているため、複製される符号ビットを信頼することはできません。

于 2012-10-04T22:07:35.667 に答える