我已在无符号变量中指定了补码值。
那么为什么这个C程序会输出一个负数?
#include<stdio.h>
#include<conio.h>
int main()
{
unsigned int Value = 4; /* 4 = 0000 0000 0000 0100 */
unsigned int result = 0;
result = ~ Value; /* -5 = 1111 1111 1111 1011 */
printf("result = %d", result); /* -5 */
getch();
return 0;
}
答案 0 :(得分:14)
%d
格式说明符指示printf
将参数视为有符号整数。请改用%u
。
答案 1 :(得分:4)
这是因为%d是signed int格式的占位符,所以它被转换了。使用%u表示无符号。