按位C操作

时间:2017-03-06 05:22:13

标签: c

当x = 1时 什么应该 ! x | x 应该是? 我真的很困惑,因为我做了它: x = 1 = 01二进制,   !x = 10    !x | x = 11 = 3进制。

但它应该是1.(甚至尝试去十六进制(一些冗长但我正在学习的是本科生),我得到-1)

2 个答案:

答案 0 :(得分: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之类的值计为true,因此将!应用于它会给出false或0。

答案 1 :(得分:1)

!运算符用于逻辑否定,!x对于数字和指针类型等效于x == 0

!x的类型为int,如果1x的比较等于0且值为0,则值为UNUserNotificationCenterDelegate其他情况。