C++ 无符号整数的补码
我最近遇到了以下代码:C++ 无符号整数的补码,c++,c,bit-manipulation,C++,C,Bit Manipulation,我最近遇到了以下代码: unsigned short int a = 0xffff; ~a; printf("%x", a); 其产出是: 0xffff 据我所知,~a应该翻转a的所有位,给出以下信息: 0x0000 那么,为什么输出0xffff?您忘记将结果分配回a。就像 int a = 3; a + 2; printf ("%d\n", a); 将打印3而不是5 您忘记将结果分配回a。就像 int a = 3; a + 2; printf ("%d\n", a); 将打印3
unsigned short int a = 0xffff;
~a;
printf("%x", a);
其产出是:
0xffff
据我所知,~a
应该翻转a的所有位,给出以下信息:
0x0000
那么,为什么输出
0xffff
?您忘记将结果分配回a。就像
int a = 3;
a + 2;
printf ("%d\n", a);
将打印3而不是5 您忘记将结果分配回a。就像
int a = 3;
a + 2;
printf ("%d\n", a);
将打印3而不是5 因为您没有将其分配给
a
,所以该值被丢弃,请重试
a = ~a;
因为您没有将其分配给
a
,所以该值被丢弃,请重试
a = ~a;
与大多数其他运算符一样,~不会就地修改变量,而是“返回”修改后的值作为其结果。想想一元负号:如果你想把符号改成一个变量,你不会这么做
-a;
但是
按位not运算符也是如此;要获得您期望的结果,请执行以下操作:
a=~a;
与大多数其他运算符一样,~不会就地修改变量,而是“返回”修改后的值作为其结果。想想一元负号:如果你想把符号改成一个变量,你不会这么做
-a;
但是
按位not运算符也是如此;要获得您期望的结果,请执行以下操作:
a=~a;
@斯科蒂鲍尔为什么会这样?哎呀!谢谢你的快速回复。@ScottyBauer为什么会这样?哎呀!谢谢你的快速回复。提示:编译时一定要有完整的警告,编译器会警告你。这不是一个“简单的印刷错误”,也不是“以不太可能帮助未来读者的方式解决的”。投票重开。虽然这个问题已经解决,但我不认为它有什么离题之处,也不认为它“不太可能帮助未来的读者”。投票重新打开。提示:总是在编译时发出完整的警告,编译器会警告你。这不是一个“简单的印刷错误”,也不是“以不太可能帮助未来读者的方式解决的”。投票重开。虽然这个问题已经解决,但我不认为它有什么离题之处,也不认为它“不太可能帮助未来的读者”。投票重新开放。