8

Java では、ビット単位の操作によって型が整数にキャストされ、符号拡張も発生します。たとえば、次のことが予想されます。

byte b = -1;
System.out.println(b >> 1);//-1

Java では、文字は UTF-16 でエンコードされ、各ユニットは 2 バイトで表されます。

char c = 0xFFFF; //I assume now the sign bit is 1.
System.out.println(c >> 1);//32767 ???? WHY

32767 ではなく -1 を期待していました。ビット演算が適用される前の型キャスト中に符号が拡張されないのはなぜですか? 何か案は?

4

2 に答える 2

12

char署名されていないため0xFFFF、実際の値は 65535 です

于 2011-11-17T10:07:01.227 に答える
3

シフト引数で実行されるプリミティブ変換を拡張するため、このように機能します。つまり、変換される型の符号を含め、情報が失われることはありません。

于 2011-11-17T10:23:13.980 に答える