【发布时间】:2011-08-25 05:33:44
【问题描述】:
#include <cstdio>
int main ()
{
unsigned long long int n;
scanf("%llu",&n);
printf("n: %llu\n",n);
n /= 3;
printf("n/3: %llu\n",n);
return 0;
}
无论我输入什么,我都会得到非常奇怪的输出,例如:
n: 1
n/3: 2863311531
或
n: 2
n/3: 2863311531
或
n: 1000
n/3: 2863311864
这是什么原因?我应该如何正确地做到这一点?
(g++ 3.4.2,Win XP)
【问题讨论】:
-
你能写一下, sizeof(unsigned long long int) 的值是多少?并尝试使用 'unsigned long int' 而不是 '..long long..'
-
在 GCC 4.2.1 上也适用于我
-
sizeof(unsigned long long int) 返回 8。我已将变量类型更改为 unsigned long int,它工作正常,但 sizeof(unsigned long int) 返回 4,所以它是常规 int。我需要更广的范围。
-
#include <cstdio>暗示 C++,但unsigned long long int和%llu暗示 C。你想使用哪个? -
我在 Linux 上检查了相同的代码,它运行良好......