在Linux中定义64位宽度整数

我尝试在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位宽吗?

最好的祝福,

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

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

使用int64_tint32_t确保int32_t位整数可以适合变量。

你遇到的问题是你正在使用的数字(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位(均包括符号位)。

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

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

您应该使用hex表示法来写出某事物的最大值。

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

你可以看到它是可读的。

要显示值:

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