void main()
{
unsigned int a = 10;
a = ~a;
printf("%d\n", a);
}
输出为-11
10 = 1010
~10 = 0101
为什么输出是负数?
答案 0 :(得分:2)
使用%x查看一致的十六进制结果。
#include <stdio.h>
void main()
{
unsigned int a = 10;
printf("%x\n", a);
a = ~a;
printf("%x\n", a);
return 0;
}
输出:
a
fffffff5
答案 1 :(得分:1)
~1010
的结果不是0101
,而是11111111111111111111111111110101
。该值的所有32位都被反转,不仅是最高位的最高位。
当结果中设置了第32位时,它是负数。
答案 2 :(得分:1)
%d
用于签名十进制整数。使用%u
以十进制格式打印无符号整数。
答案 3 :(得分:0)
使用%u代替%d,因为printf会根据%d或%u处理您的变量。你的