C 无符号整数的位求反运算符
我不明白为什么它的输出是ffff,它应该是0000。假设int take 2字节的ffff将存储在内存中: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
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
更改它们所操作的变量的值。