unsigned int的按位求反运算符

时间:2013-12-26 06:15:58

标签: c

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

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

输出:ffff

5 个答案:

答案 0 :(得分:5)

你应该做

a = ~a;

将否定值分配给 a

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

 printf("%x", ~a);

答案 1 :(得分:2)

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

a = ~a;

答案 2 :(得分:1)

如何保存操作的值:

a = ~a;

您确实执行了按位~操作,但未将返回值分配给任何变量 此运算符返回值,而不会自行修改变量。

答案 3 :(得分:1)

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

a = ~a;

会给你正确的输出。

答案 4 :(得分:0)

声明

~a;

~运算符NOT(补码)a的值,其值被丢弃(与一元运算符++--不同),即{{1}除非您将其分配给~a

,否则a不执行任何操作
a