0

次のコードがあります。

byte my_byte;   
my_byte |= (1 << 7);
my_byte |= (1 << 6);    

my_byte の 8 番目と 7 番目のビットを 1 に設定しようとしています。デバッガーを使用して、1 行目を実行した後、my_byte の値が -128 であることがわかりました。2 行目を実行すると、my_byte の値は -64 になります。

最終結果は 192 (2^7 + 2^6) になると思いました。私が間違っていることを誰かが知っていますか?

また、最初に my_byte を初期化する必要がありますか? もしそうなら、どうすればすべてのビットを 0 に設定できますか?

ご協力ありがとうございました。

4

1 に答える 1

1

問題は、byte署名されているため、10000000(2 の補数) が -128 に変換されることです。shortの代わりに使用しbyteます。すべてのビットを 0 に初期化するには、次のようにします。short my_byte = 0;

Ps : short は 8 ビットの byte とは異なり 16 ビットです。私の知る限り、Java には 8 ビットの符号なしプリミティブ型はありません。

于 2013-05-30T11:03:20.107 に答える