【发布时间】:2011-04-11 09:23:34
【问题描述】:
假设您有以下 C 代码。
unsigned char a = 1;
printf("%d\n", ~a); // prints -2
printf("%d\n", a); // prints 1
我很惊讶地看到 -2 由于 ~1 转换而被打印出来:
0000 0001 的反义词是 1111 1110。这不是 -2。
我在这里错过了什么?
【问题讨论】:
-
将0和-1的值写入二进制。
-
"1111 1110 --> 除了 -2" 你从哪里得到这个?这正好是二进制补码的 -2。
-
~是一个位运算符,意味着它对数字的各个位进行运算; 二元运算符是接受两个操作数的运算符。 -
使用
%u进行无符号十进制转换。
标签: c binary logic bitwise-operators