类似位运算符之间的差异
在引用逐位运算符时,有什么区别! 和〜? 我觉得他们都翻了一下,但是1可能会给最后的答案增加1分?
~0xC4 compared to !0xC4
谢谢!
!
它不是一个按位运算符,它是一个布尔运算符。
布尔运算符操作真值,通常为int
。 任何非零值都为true,而0为false。 结果总是1
表示true, 0
表示false。
-
!
不是布尔值 -
&&
是布尔值 -
||
是布尔值还是
这些是例如if
因为它需要一个布尔值。 布尔和/或运算符也是短路的,这意味着它们在结果已知时停止评估。 这很好,意味着1 || crash_and_burn()
1 || crash_and_burn()
永远不会崩溃和烧毁。
但是,在促销之后,当然,按位运算符对整数类型参数的每个位进行操作。
-
~
是按位不是 -
&
是按位和 -
|
是按位还是 -
^
是逐点排斥 – 或(xor)
按位运算符(当然)不是短路的,因为它们只是在位对上运行,所以没有任何意义。 请注意,虽然有一个^
位运算符,但没有^^
布尔值xor运算符。
~0xC4翻转位并执行此操作:
1100 0100 (0xC4) --> 0011 1011 (0x3B)
!0xC4翻转逻辑真值并执行此操作:
True (0xC4) --> False (0)
!
和~
是两种不同类型的运算符。 !
是逻辑否定 , ~
是按位否定 。
逻辑运算符是那些使用数学逻辑的运算符 。
例如: Sally went to the market and bought milk.
如果p: Sally went to the market.
而q: Sally bought milk.
然后该语句可以显示为p && q
。
现在, Bitwise运算符是那些使用每个数字的二进制表示的运算符 。
如果p = 10
则可以表示为p = 1010 (binary)
。
并且q = 12
这可以表示为q = 1100 (binary)
。
然后p & q = 1000 (binary)
。
同样的!
和~
。
!p = Sally did not go to the market.
~p = 0101
。
在C(和C ++)中,布尔值(True False ideas)和int之间没有分离 。 这意味着布尔值由整数表示为True = 1
和False = 0
。
这里0xC4 = 1100 0100
所以, !0xC4 = 0000 0000 and ~0xC4 = 0011 1011 [0x3B]
。
提示:如果您希望将某个变量转换为布尔值(即x = 5 -> x = 1
),请使用!!x
。
!!x -> !(!(5)) -> !(0) -> 1