0

ここにコードがあります:

byte c = (byte) (0b10101010);
byte d = (byte) (c >> 1);
System.out.println(d);

結果は -85 です。(右シフト操作を行う前に、バイト c が自動的に int に拡張されるため、その理由はわかっています (上位 3 バイトはすべて 1 を構成します))

ここに別のコードがあります:

byte c = (byte) (0b10101010 >> 1);
System.out.println(c );

結果は 85 です。私の質問は、右シフト操作を行う前に、なぜバイナリ コード (0b10101010 が int (ff, ff, ff, 0b10101010) に拡張されないのか)

4

2 に答える 2

0

「intに拡張」はありません。つまり、最上位ビットが符号ビット (負の数の場合は 1、非負の数の場合は 0) で埋められます。

于 2013-10-25T05:25:07.427 に答える
0

0b10101010 のようなリテラルには型intがあるため、より大きな型に変換する必要はありません。また、正の数なので、そもそも符号拡張は適用されません。

于 2013-10-25T05:26:14.120 に答える