私はこの(~(1 << 3))
の声明を実行しました。その結果、が届いています。誰かがステップバイステップで私が結果としてどのように-9価値を得ているか説明してもらえますか?
声明:(~(1 << 3))
結果:
私はこの(~(1 << 3))
の声明を実行しました。その結果、が届いています。誰かがステップバイステップで私が結果としてどのように-9価値を得ているか説明してもらえますか?
声明:(~(1 << 3))
結果:
<<
がi
がシフトされるビット数である数に適用される場合、単純な用語で、2^i
を乗算left-shift
オペレータ、あります例えば:
1 << 3 = 8 (multiply 1 by 2^3)
2 << 4 = 32 (multiply 2 by 2^4)
と~
がかかりNOT
オペレータ、あります数字の各ビットはそれをトグルします。簡単に言えば、例えば~x = -x - 1
:
~100102 = 011012
~8 = -9
今すぐあなたの質問、(~(1 << 3)) = (~8) = -9
に来ます。詳細については、この回答を確認してください:NOT(~) vs NEGATION(!)。
コンピュータの番号は2's complement formに格納されています。
元の番号は1です。これはバイナリで0...0001
です。私はビット4〜30をスキップしています。それらはすべてゼロになります(32ビットシステムと考える)。
1 << 3
を行うと、0...1000
すなわち+8が得られます。簡単に言えば、これは2^i
で1を乗算することを意味します。ここではi = 3
です。
これを反転すると、2の補数形式で負の数である1111 1111 1111 1111 1111 1111 1111 1000
が生成されます。
、番号の値を取得する最初の1(符号ビット)を落とし、再び全体数を反転し、だから、1
を追加し、再び反転すると、あなたに0...1000
を与えるだろうし。これに1を加えて、0...1001
。
最初の符号ビットは、一般に1
これを反転すると、2の補数形式の負の数である1111 1111 1111 1111 1111 1111 1111 1000が生成されます。なぜあなたは32ビットを反転させているのですか?最後の4ビットを反転させないのはなぜですか? – prashanth
であるので、これは9と符号である数の値が負である、 '〜X 'は' -xに等しい - 1'。 '1 << 3」は「8」、「-8-1」は「-9」である。 –