【发布时间】:2013-10-29 00:30:14
【问题描述】:
这个程序的输出是-13。我从来没有完全理解 C 中的 ~ 运算符。为什么它给出 -13 作为输出?如何将 ~ 运算符限制为数字的 4 位?
#include<stdio.h>
#include<conio.h>
int main()
{
int a = 12;
a = ~a;
printf("%d",a);
getch();
return;
}
【问题讨论】:
-
阅读 C99 6.5.33,一元算术运算符。 “~ 运算符的结果是其(提升的)操作数的按位补码(即,当且仅当未设置转换操作数中的相应位时,结果中的每个位都被设置)。整数提升在"关于整数提升的部分会带你到C99 6.3.1.1,有点头晕,不过你问了。
-
您得到 -13,因为系统使用二进制补码表示负数,而
~运算符为您提供一个补码。二进制补码定义为一个补码加一。