如何解决C 程序如何显示最大可能的 unsigned long long 值?
下面的程序不应该把 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;
}
解决方法
函数 pow
返回一个 double
,通常是带有 53 位尾数的 64 位浮点类型。这不足以解析粒度为 1 的 264 附近的数字。
下一个可表示的 double
值小于 264 是 264 − 2048 = 264 − 2 11。 264 − 1 仍然是 264,这是最接近的可表示值。将其转换为 unsigned long long
,您会得到 0。
如果需要最大可能的 unsigned long long
的值,可以使用 ULLONG_MAX
中的 <limits.h>
:
printf ("%llu\n",ULLONG_MAX); // need <limits.h>
(unsigned long long) 0
的一个补码 - 一个 unsigned long long
设置了所有位 - 也应该有效:
printf ("%llu\n",~0ull);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。