2016-11-26 1 views

答えて

2

<<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(!)

+0

システムが内部で〜8から-9に変換する方法を説明できますか? – prashanth

+0

リンクを参照してください:http://stackoverflow.com/questions/11572181/not-vs-negation @prashanth – Jarvis

+0

問題が解決した場合は、回答を受け入れたものとしてマークしてください。 @prashanth – Jarvis

4

コンピュータの番号は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

+0

これを反転すると、2の補数形式の負の数である1111 1111 1111 1111 1111 1111 1111 1000が生成されます。なぜあなたは32ビットを反転させているのですか?最後の4ビットを反転させないのはなぜですか? – prashanth

関連する問題