在Linux中定义64位宽度整数

时间:2010-02-27 15:38:38

标签: c

我尝试在Ubnutu 9.10上使用C语言定义64位宽度的整数。 9223372036854775808是2 ^ 23

long long max=9223372036854775808
long max=9223372036854775808

编译时,编译器发出警告信息:

binary.c:79:19: warning: integer constant is so large that it is unsigned
binary.c: In function ‘bitReversal’:
binary.c:79: warning: this decimal constant is unsigned only in ISO C90
binary.c:79: warning: integer constant is too large for ‘long’ type

长型是64位宽吗?

最诚挚的问候,

4 个答案:

答案 0 :(得分:11)

   long long max=9223372036854775808LL; // Note the LL
// long max=9223372036854775808L; // Note the L

long long类型至少为64位,long类型至少为32位。实际宽度取决于编译器和目标平台。

使用int64_tint32_t确保64/32位整数可以适合变量。

答案 1 :(得分:5)

您遇到的问题是您使用的号码(9223372036854775808)是2**63,而long long可以容纳的最大值(作为64位有符号2s补码类型)是少于一个 - 2**63 - 1,或9223372036854775807(连续63个二进制1)。

对于long long而言过大的常量(如本例所示)的类型为unsigned long long,这就是您收到警告integer constant is so large that it is unsigned的原因。

long类型至少为32位,long long类型至少为64位(均包括符号位)。

答案 2 :(得分:0)

我不确定它会解决您的问题(LL解决方案看起来不错)。但这是一个重新定位:

您应该使用十六进制表示法来写出某些内容的最大值。

unsigned char max = 0xFF;
unsigned short max = 0xFFFF;
uint32_t max = 0xFFFFFFFF;
uint64_t max = 0xFFFFFFFFFFFFFFFF;

你可以看到它是可读的。

显示值:

printf("%lld\n", value_of_64b_int);

答案 3 :(得分:0)

我认为这取决于您使用的平台。如果您需要确切知道您使用的整数类型,如果您的系统中包含此包含文件,则应使用Stdint.h中的类型。