2016-11-25 57 views
2

我對編程頗爲陌生,我一直在努力學習一些基本的二進制,但仍然有一件事我不太明白。這是關於NOT運算符的規則。二進制NOT(〜)運算符是如何工作的?

可以說,我wan't計算這個:據我瞭解62&~29

62 = 111110 
29 = 011101 

現在的結果應該是這樣的:

100011 = 35 

但結果我從代碼中得到的是34.

所以我的問題是:最後一個值發生了什麼?爲什麼它沒有被添加到34?

希望有人能向我解釋一下:D

祝你有美好的一天。

回答

1

~運營商,它是位補操作。

它採用操作數的位模式,並將所有0位轉換爲1位,並將所有1位轉換爲0位。

它對數值的影響取決於您的實現使用的補充約定以及用於表示該類型的位數。

在特定示例中,62&~29被評價爲62&(~29)這是111110&(~011101)111110&a100010100010這是34。在這裏,我很迂腐,我正在使用a代表1位數,所以位數等於你的類型的寬度。

+0

好吧,這更有意義。非常感謝您的解釋:) –

+0

〜1實際上是-2的補碼。 –

+0

糟糕。你是對的。我已經刪除了這句話。 – Bathsheba

0
29 --> 011101 
not29 --> 100010 (turn 1s into 0 and vice-versa) 

62  --> 111110 
not29 --> 100010 
62&not29 --> 100010 (1 if and only if both are 1, otherwise 0) 

你是怎麼得到35的?

+0

我得到了35,因爲我真的不知道如何工作,但我現在看到我錯了什麼。我將0轉換爲1,即使它們不是1或0。謝謝您的幫助 :) –