C程序如何显示最大可能无符号long的值?
下面的程序不应该将2^64-1的值打印为整数吗C程序如何显示最大可能无符号long的值?,c,integer-overflow,C,Integer Overflow,下面的程序不应该将2^64-1的值打印为整数吗 #include <stdio.h> #include <math.h> int main(void) { printf ("%llu\n" , ( unsigned long long int ) ( pow (2 , 8 * sizeof (unsigned long long) ) - 1 ) ) ; return 0; } #包括 #包括 内部主(空) { printf(
#include <stdio.h>
#include <math.h>
int main(void)
{
printf ("%llu\n" , ( unsigned long long int ) ( pow (2 , 8 * sizeof (unsigned long long) ) - 1 ) ) ;
return 0;
}
#包括
#包括
内部主(空)
{
printf(“%llu\n”,(无符号长整型)(pow(2,8*sizeof(无符号长整型))-1));
返回0;
}
函数pow
返回一个double
,通常是一个带有53位尾数的64位浮点类型。这还不足以解析粒度为1的264附近的数字
小于264的下一个可表示的double
值是264− 2048 = 264 − 211264− 1仍然是264,这是最接近的可表示值。将其转换为无符号long
,得到0
如果需要最大可能的无符号长的值,可以使用
中的ULLONG\u MAX
:
函数
pow
返回一个double
,通常是带有53位尾数的64位浮点类型。这还不足以解析粒度为1的264附近的数字
小于264的下一个可表示的double
值是264− 2048 = 264 − 211264− 1仍然是264,这是最接近的可表示值。将其转换为无符号long
,得到0
如果需要最大可能的无符号长的值,可以使用
中的ULLONG\u MAX
:
#包括…printf(“ULLONG_MAX=%llu\n”,ULLONG_MAX)
@kaylum xd而不是8
您可以使用CHAR\u BIT
(以便于携带的方式产生错误结果:-)#包括…printf(“ULLONG\u MAX=%llu\n”,ULLONG\u MAX)
@kaylum,而不是8
您可以使用CHAR\u-BIT
(以一种可移植的方式产生错误的结果:-)有趣的是,在x86\u 64 gcc上它可以工作(但在clang上不工作):。有趣的是,在x86\u 64 gcc上它可以工作(但在clang上不工作):。
printf ("%llu\n", ULLONG_MAX); // need <limits.h>
printf ("%llu\n", ~0ull);