c - 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 的粒度解析 2 64附近的数字。
double
下一个小于 2 64的可表示值是 2 64 - 2048 = 2 64 - 2 11。2 64 - 1 仍然是 2 64,这是最接近的可表示值。将其转换为unsigned long long
,您将得到 0。
如果需要尽可能大的值unsigned long long
,可以使用ULLONG_MAX
from <limits.h>
:
printf ("%llu\n", ULLONG_MAX); // need <limits.h>
一个的补码(unsigned long long) 0
- anunsigned long long
所有位都设置了 - 也应该工作:
printf ("%llu\n", ~0ull);
推荐阅读
- javascript - JSX 中的字符串插值(React)
- django - 未找到关键字参数“{'pk': ''}' 的“date_detail”的反向。尝试了 1 种模式:['date/(?P
[0-9]+)$'] - react-native - 运行在不同端口上的 Docker localhost 和 React Native Metro 服务器可以通信吗?
- eigen3 - 将返回变量写入外部数据
- sql - 如何在mssql服务器中传递参数,中间有斜线
- r - 整洁的评估:如何在依赖 %>% 管道的自定义函数中使用 dplyr::na_if 作为可选参数
- javascript - 不同网页的 ID 值相同
- python - 如何在迭代时同时达到两个变量的某个值?
- c# - 使用允许排序和允许自动筛选 C# 保护 Excel
- python - Python / MatplotLib / Tkinter 中 PolygonInteractor / LineBuilder 之间的不同行为