Floating point 将log2()的浮点值转换为int,结果为奇数 #包括 #包括 int main() { printf(“%f\n”,log2((无符号)~0));/*整数的浮点大小*/ printf(“%d\n”,(int)log2((无符号)~0));/*将不会转换为int*/ }
这将返回32.000000和31!为什么不是32?我稍微更改了您的程序:Floating point 将log2()的浮点值转换为int,结果为奇数 #包括 #包括 int main() { printf(“%f\n”,log2((无符号)~0));/*整数的浮点大小*/ printf(“%d\n”,(int)log2((无符号)~0));/*将不会转换为int*/ },floating-point,Floating Point,这将返回32.000000和31!为什么不是32?我稍微更改了您的程序: #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 */ } 它表明:
#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 */
}
它表明:
printf("%.16e\n", log2((unsigned)~0)); /* float size of int */
3.199999999664098E+01
31
因此,“为什么它转换为31”的答案是log2((无符号)~0)
介于31和32之间,因为您可以知道~(无符号)0
略小于232
另一个问题是“为什么浮点数3.199999999664098e+01
打印为32.000000
?”。答案是“您还希望它打印成什么?32.000000是最接近的十进制表示形式,点后有6位数字与实际浮点值。”
3.1999999999664098e+01
31