类型"long long"总是64位吗?

min*_*gos 3 c

我正试图在C中实现George Marsaglia的Complementary Multiply-With-Carry算法.它似乎在Win7 64位和Linux 32位下运行良好,但似乎在Win 7 32位下表现得很奇怪.它返回的随机数是32位,但是内部使用的临时值应该是64位,并且它被声明:

unsigned long long t;
Run Code Online (Sandbox Code Playgroud)

我怀疑这可能是造成不良行为的原因,所以我的问题是:

类型是"长长"64位吗?是否支持32位Windows?

Tre*_*ent 7

如果您的编译器有stdint.h我建议使用uint64_t.


caf*_*caf 5

该类型long long保证至少为 64位(尽管保证正式以其必须能够表示的值范围的形式).

以下是C99标准的 §5.2.4.2.1 (链接到草案):

- 类型对象的最大值 unsigned long long int

ULLONG_MAX 18446744073709551615 // 2**64 ? 1