执行此操作时为什么会得到负数?
unsigned int a = 1 << 31;
printf("%d",a);
我已经在计算机上检查了整数大小,它是4字节。所以我的整数由32位组成,向左移动31次,直到最高位为止。这意味着它应该是正数,但我总是消极的。
我得到的:-2147483648
我的期望:一些正数(可能是1073741824)
我在这里缺少什么?
答案 0 :(得分:0)
使用%u作为printf格式字符串。
意义:
printf("%u",a);
答案 1 :(得分:0)
问题不在于你有点转移。您只是不打印相应的格式。
%d或%i用于打印int,因此当您尝试打印unsigned int时,它将转换为signed int。
答案 2 :(得分:0)
除了使用(%d
而不是%u
)的错误格式说明符之外,您可能通过将1转换为符号位来调用未定义的行为。 int
操作数,this answer中所述
要修复它,请使用无符号文字:
unsigned int a = 1u << 31;
// ^