2017-12-01 14 views
0

次のコードが-12をどのように与えるのか理解できません。私を助けてください。整数を否定すると予期しない結果が発生する

int a=11;  
int result=~a;  
System.out.println(result);  

私はそれが4.を与えると思ったが、はい、先行ゼロを見た。
2の補数と何か関係があると思いますが、カントはどうしたらいいか分かります。

+0

2の補数=(-x) - 1 したがって、これにより-12が得られます。これを読んでください:https://stackoverflow.com/questions/8305199/the-tilde-operator-in-python –

答えて

4

11のバイナリ表現は00000000000000000000000000001011です。

この番号の否定は11111111111111111111111111110100です。

これは-12の2の補数表現です。

+0

早急な対応のためにEranに感謝しますが、私は0100から-12に変換し、私は2のことをしなければならない補体? – pankaj

+0

@pankaj負の数は常にJavaでは2 'の補数で表されます。正の数を無効にすると、負の数が得られます。 '11111111111111111111111111110100'の値は、それに1100(12)を加えて2^32(1に続いて32 0)にする必要があるため、-12です。同様に '11111111111111111111111111111111'は' -1'です.2^32に達するには、それに1を加えなければならないからです。 – Eran

+0

非常に有用だった.... thanx @Eran – pankaj

関連する問題