使用联合计算log2

New*_*ser 3 c logarithm unions

我发现下面的代码,它计算log2float 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实际上有什么价值?谢谢.

Ris*_*aje 5

我无法理解它是如何使用未初始化的东西的.

实际上vx.i是初始化.联合将占用相同的内存位置.因此vx.i在初始化的同时vx.f初始化.

实际上vx.i的值是多少?

要获得实际值,vx.i您需要了解浮点数如何存储在内存中.请参考这里的优秀答案浮点数如何存储在内存中?

从答案链接,

如果vx.f1.0那么vx.i3f800000(十六进制)