2016-03-25 2 views
4

私が持っている私は11110000から00011110が、これは実際には符号ビットに1を入れてやってん変化するであろうと信じて、または遮断され、符号ビットが変更された符号ビットになります一つです 左に1バイトシフトするとJavaの符号付きビットが変更されますか?

byte i = 30; 
i <<= 3; 
System.out.println(i); 

他の方法ですか?

また、これは-16を出力します。どうしてこれなの?私は基底10の11110000-112と等しいと思った、私は-16がどこから来るのか混乱している。

+1

可能な複製 - http://stackoverflow.com/questions/16049720/signed-left-shift-behaviour – F43nd1r

+0

「11110000」は2の補数形式です。小数点に-16を与える –

+0

2の補数はどのように機能しますか? Googleはあなたが追加1のバイトを逆転させると言っているが、それは '00010000'または正の16を生成しないでしょうか? – kneedhelp

答えて

3

バイトのビットは、1,2,4,8,16,32,64および-128を表します。

これを符号ビットと呼びますが、実際には-128を表します。

11110000ですので、16 + 32 + 64 - 128 == -16です。

+0

コンパイラは、最初のビットを他のビットと異なる方法で扱いますか? – kneedhelp

+0

私はあなたの質問を理解するか分からない。 –

+0

ここで何が起こっているのか分かりません。符号ビットが1の場合、出力に-128が加算されますか? – kneedhelp

関連する問題