Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无符号整数的补码_C++_C_Bit Manipulation - Fatal编程技术网

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为什么会这样?哎呀!谢谢你的快速回复。提示:编译时一定要有完整的警告,编译器会警告你。这不是一个“简单的印刷错误”,也不是“以不太可能帮助未来读者的方式解决的”。投票重开。虽然这个问题已经解决,但我不认为它有什么离题之处,也不认为它“不太可能帮助未来的读者”。投票重新打开。提示:总是在编译时发出完整的警告,编译器会警告你。这不是一个“简单的印刷错误”,也不是“以不太可能帮助未来读者的方式解决的”。投票重开。虽然这个问题已经解决,但我不认为它有什么离题之处,也不认为它“不太可能帮助未来的读者”。投票重新开放。