#include <stdio.h>
#include <math.h>
int main()
{
printf("%f\n", log2((unsigned)~0)); /* float size of int */
printf("%d\n", (int)log2((unsigned)~0)); /* will not convert to int */
}
这将返回32.000000和31!为什么不是32?
答案 0 :(得分:1)
我稍微改变了你的程序:
printf("%.16e\n", log2((unsigned)~0)); /* float size of int */
它显示:
3.1999999999664098e+01 31
所以“为什么它转换为31”的答案是log2((unsigned)~0)
介于31和32之间,因为你可以预期知道~(unsigned)0
略小于2 32
另一个问题是“为什么浮点数3.1999999999664098e+01
打印为32.000000
?”。对此的答案是“你还有什么喜欢打印的? 32.000000是最接近的十进制表示,点后6位数与实际浮点值。“