有了这段代码(这是Quake 3中使用的众所周知的快速平方根逆算法),我无法理解打印输出。我从表面上了解了整个算法,但希望获得深入的了解。什么i
时候printf
打印有什么价值?这给我1120403456。是否取决于计算机的体系结构?我读过某处这样的类型操纵会导致不确定的行为。在另一个网站上,我读到了那时的值i
是此变量使用的位的确切值。我对此感到困惑,并且诚实地期望值i
为100。如何解释结果1120403456?如何将此值转换为十进制100?这些位是以某种方式编码的吗?这是代码摘录:
#include<stdio.h>
int main()
{
float x = 100;
float xhalf = 0.5f*x;
int i = *(int*)&x;
printf("%d", i);
i = 0x5f3759df - (i>>1);
x = *(float*)&i;
x = x*(1.5f-xhalf*x*x);
return x;
}
i
after的值int i = *(int*)&x;
是浮点数的位表示形式100.0
,即x的初始值。由于您使用的是%d
格式,printf
因此会将其表示形式打印为十进制整数。
的位模式100.0
在IEEE 32位float
是0x42c80000
,这是1120403456
在十进制
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句