2016-11-26 23 views

回答

2

<<left-shift運算符,它簡單地說,當應用到的數,由2^i,其中i是要移位的比特的數量相乘,例如:

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,其中i = 3在這裏。

現在,將其反轉爲1111 1111 1111 1111 1111 1111 1111 1000,這是2的補碼形式的負數。

要得到數的值,下降的第一1(符號位),再次反轉整個號碼,並添加1

所以,再次反轉會給你0...1000。加1就可以了,所以0...1001

這是爲9和符號是負的,因爲第一個符號位是1。

+0

現在,反過來得到1111 1111 1111 1111 1111 1111 1111 1000這是2的補碼形式的負數。當你反轉32位時,你爲什麼不反轉最後4位? – prashanth

相關問題