New*_*ser 3 c logarithm unions
我发现下面的代码,它计算log2的float x:
union { float f; unsigned int i; } vx = { x };
float y = vx.i;
y *= 1.0 / (1 << 23);
y = y - 126.94269504f;
return y;
Run Code Online (Sandbox Code Playgroud)
funion 的参数初始化为输入x然后使用i?我无法理解它是如何使用未初始化的东西的.vx.i实际上有什么价值?谢谢.
我无法理解它是如何使用未初始化的东西的.
实际上vx.i是初始化.联合将占用相同的内存位置.因此vx.i在初始化的同时vx.f初始化.
实际上vx.i的值是多少?
要获得实际值,vx.i您需要了解浮点数如何存储在内存中.请参考这里的优秀答案浮点数如何存储在内存中?
从答案链接,
如果vx.f是1.0那么vx.i会3f800000(十六进制)