类型“long long”总是64位吗?

时间:2010-01-26 22:27:59

标签: c

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

unsigned long long t;

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

类型“long long”是64位吗?是否支持32位Windows?

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

类型long long保证至少 64位(尽管保证正式采用它必须能够表示的值范围的形式)。

以下内容见C99 standard (link to draft)的§5.2.4.2.1:

  

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

     

ULLONG_MAX 18446744073709551615 // 2**64 − 1