【问题标题】:difference between similar bitwise operators类似位运算符之间的区别
【发布时间】:2013-04-26 16:15:41
【问题描述】:

在引用位运算符时,! 和有什么区别!和〜?我觉得他们都在翻转位,但 1 可能会在最终答案中加 1?

~0xC4

compared to

!0xC4

谢谢!

【问题讨论】:

    标签: c bit-manipulation bitwise-operators


    【解决方案1】:

    ! 不是位运算符,而是布尔运算符。

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

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

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

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

    • ~ 按位不是
    • & 是按位和
    • | 是按位或
    • ^ 是按位异或(异或)

    按位运算符(当然)不是短路的,这没有任何意义,因为它们只是对位对进行操作。请注意,虽然有 ^ 位运算符,但没有 ^^ 布尔异或运算符。

    【讨论】:

      【解决方案2】:

      ~0xC4 翻转位并这样做:

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

      !0xC4 翻转逻辑真值并这样做:

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

      【讨论】:

        【解决方案3】:

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

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

        例如: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++)中,布尔值(真假想法)和 int 之间没有分隔。这意味着布尔值由整数表示为True = 1False = 0

        这里0xC4 = 1100 0100

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-24
          • 2016-05-18
          • 2011-10-22
          • 2012-10-06
          • 1970-01-01
          • 2015-11-07
          • 1970-01-01
          相关资源
          最近更新 更多