当x = 1时
什么应该
! x | x
应该是?
我真的很困惑,因为我做了它:
x = 1 = 01二进制,
!x = 10
!x | x
= 11 = 3进制。
但它应该是1.(甚至尝试去十六进制(一些冗长但我正在学习的是本科生),我得到-1)
答案 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
,如果1
与x
的比较等于0
且值为0
,则值为UNUserNotificationCenterDelegate
其他情况。