在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_t
和int32_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);