【问题标题】:Bitwise negation operator of unsigned intunsigned int 的按位否定运算符
【发布时间】:2013-12-26 14:34:43
【问题描述】:

我无法理解为什么它的输出是 ffff 它应该是 0000。假设 int 需要 2 个字节 ffff 将存储在内存中:1111 1111 1111 1111 所以在 ~a 之后值将变为:0000 0000 0000 0000。但输出ffff 我错过了一些一般概念吗?

  #include <stdio.h>
    void main()
    {
      unsigned int a = 0xffff;
      ~a;
      printf("%x", a);
    }

输出:ffff

【问题讨论】:

  • 尝试将它重新分配给它自己...只有 a++ 和 ++a 是一元操作..
  • @AurA,这不是一元运算符的意思。您还有一元 +-~,它们都对单个参数进行操作。只有 a++++aa----a 会更改它们正在操作的变量的值。

标签: c


【解决方案1】:

你应该这样做

a = ~a;

将取反的值赋给a

或者如果您只想打印它,请执行

 printf("%x", ~a);

【讨论】:

    【解决方案2】:

    ~ 运算符不会就地更改变量,它会返回更改的结果。因此,为了对变量执行按位求反,您需要将其分配给自身:

    a = ~a;
    

    【讨论】:

      【解决方案3】:

      您必须将值分配回变量。你只是在做~a。您没有将其分配回 a。

      a = ~a;
      

      会给你正确的输出。

      【讨论】:

        【解决方案4】:

        保存操作的值怎么样:

        a = ~a;
        

        您确实执行了按位 ~ 操作,但您没有将返回值分配给任何变量。
        此运算符返回一个值,并且不修改变量本身。

        【讨论】:

          【解决方案5】:

          在声明中

          ~a;
          

          ~ 运算符 NOT(补全)a 的值并且其值被丢弃(与一元运算符 ++-- 不同),即 ~aa 没有任何作用,除非您指定发给a

          a = ~a;
          

          【讨论】:

            猜你喜欢
            • 2011-05-19
            • 1970-01-01
            • 2018-06-28
            • 2023-03-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-02-03
            • 2011-08-24
            相关资源
            最近更新 更多