类似的位运算符之间的差异

时间:2013-05-02 13:11:58

标签: c bit-manipulation bitwise-operators

在引用逐位运算符时,有什么区别!和〜?我觉得他们两个都翻了一下,但是1可能会给最后的答案增加1个?

~0xC4

compared to

!0xC4

谢谢!

3 个答案:

答案 0 :(得分:7)

!不是按位运算符,它是一个布尔运算符。

布尔运算符对真值进行操作,通常为int。任何非零值都为true,而0为false。结果始终为1为true,0为false。

  • !不是布尔值
  • &&是布尔值和
  • ||是布尔值或

这些是用于例如if因为它需要一个布尔值。布尔和/或运算符也是短路的,这意味着它们在结果已知时停止评估。这很好,这意味着1 || crash_and_burn()永远不会崩溃和燃烧。

但是,在促销之后,当然,按位运算符对整数类型参数的每一位进行操作。

  • ~按位不是
  • &是按位和
  • |是按位或
  • ^是有点的exlusive-or(xor)

按位运算符(当然)不是短路的,因为它们只是在位对上运行,所以没有任何意义。请注意,虽然有一个^按位运算符,但没有^^布尔值xor运算符。

答案 1 :(得分:2)

~0xC4翻转位并执行此操作:

1100 0100 (0xC4) --> 0011 1011 (0x3B)

!0xC4翻转逻辑真值并执行此操作:

True (0xC4) --> False (0)

答案 2 :(得分:0)

!~是两种不同类型的运算符。 !逻辑否定~按位否定

逻辑运算符是那些使用数学逻辑的运算符。

例如:Sally went to the market and bought milk.

如果p: Sally went to the market.

q: Sally bought milk.

然后该陈述可以显示为p && q

现在,按位运算符是那些使用每个数字的二进制表示的运算符。

如果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之间存在 no separation 。这意味着布尔值由整数表示为True = 1False = 0

此处0xC4 = 1100 0100

所以,!0xC4 = 0000 0000 and ~0xC4 = 0011 1011 [0x3B]

提示: 如果您希望将某个变量转换为布尔值(即x = 5 -> x = 1),请使用!!x

!!x -> !(!(5)) -> !(0) -> 1