【发布时间】:2016-01-31 20:32:56
【问题描述】:
这是我的代码:
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned long int x = 0;
// trying to make x = 2,147,483,648
x = 1 << 31;
printf("%lu", x);
}
它返回 x = 18446744071562067968。我读到 unsigned long int 应该达到 4,294,967,296,那么为什么我不能使用 1
【问题讨论】:
-
无论写在哪里:这是错误的! port70.net/~nsz/c/c11/n1570.html#5.2.4.2.1 并正确计算数学。提示:最大值。值不能是偶数。
-
胡?它表示 unsigned long int ULONG_MAX 4294967295 // 2^32 - 1 类型的对象的最大值
-
应大众的要求,我会尽力帮助您。发布到 C 标准的链接中第 1 段的最后一句指出“它们的实现定义的值在幅度(绝对值)上应等于或大于显示的值,具有相同的符号。”。希望重点有所帮助。另请注意,您在代码中移动了
31,但在文本中移动了32。 “减一计数”就这么多;这只是将值加倍并导致 Windowsunsigned long的未定义行为。对于 POSIX,它是正确的,顺便说一句。因为它有 64 位。
标签: c long-integer bit-shift