2017-03-06 133 views
0

當x = 1時 應該怎樣 ! x | x 應該是? 我真的很困惑,因爲我做了它: x = 1 = 01二進制, !x = 10 !x | x = 11 = 3in十進制。按位C操作

但它應該是1(即使嘗試將十六進制(長篇的東西是什麼,但我學習作爲一個本科),我得到-1)

回答

4

!邏輯否定運算符。如果你給它非零的東西,它會讓你回零。如果你給它一個零它給你回1.

所以

!x | x 
=> !1 | 1 
=> 0 | 1 
=> 1 

注意這是怎麼從按位否定操作符,~不同。如果您曾使用這種替代!,事情會是這樣制定出(假設8位值,則可以擴展到32或64或其他):

~x | x 
=> ~1 | 1 
=> 11111110 | 00000001 
=> 11111111 
=> -1 

這一切都歸結到理解的差異在!~之間。這並不明顯;這只是你必須習慣的。正如提醒

!7 = !23423523 = !46 = !(-200) = !1 = 0 

對於任何非零x!x = 0。就是這樣。 C背後的想法是將0視爲假,其他任何事情都視爲真。所以,由於像70343個或1計數爲真,一個值施加到!它給出假的,或0

1

!操作者爲邏輯否定,!x相當於x == 0爲數值和指針類型。

!x有類型int1如果x一個值進行比較等於0並且具有用於所有其它情況下的0值。