C 无符号整数的位求反运算符

C 无符号整数的位求反运算符,c,C,我不明白为什么它的输出是ffff,它应该是0000。假设int take 2字节的ffff将存储在内存中:1111111111111111因此~之后的值将变为:0000。但是,我是否缺少一些一般概念 #include <stdio.h> void main() { unsigned int a = 0xffff; ~a; printf("%x", a); } #包括 void main() { 无符号整数a=0xfff

我不明白为什么它的输出是ffff,它应该是0000。假设int take 2字节的ffff将存储在内存中:
1111111111111111
因此~之后的值将变为:0000。但是,我是否缺少一些一般概念

  #include <stdio.h>
    void main()
    {
      unsigned int a = 0xffff;
      ~a;
      printf("%x", a);
    }
#包括
void main()
{
无符号整数a=0xffff;
~a;
printf(“%x”,a);
}

输出:ffff

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

a = ~a;

保存操作的值如何:

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

您应该这样做

a = ~a;
将求反的值指定给a

或者,如果你想直接打印出来,就这样做

 printf("%x", ~a);

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

a = ~a;
将为您提供正确的输出。

在语句中

~a;
~
运算符不(补充)a的值,其值将被丢弃(与一元运算符
++
--
不同),即,
~a
对a不做任何操作,除非将其分配给
a

a = ~a;

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