左移浮动类型

Aka*_*ash 6 c floating-point floating-point-conversion

尝试时遇到编译器错误

float_val=float_val<<1;
Run Code Online (Sandbox Code Playgroud)

它给出了一个错误,说"错误C2296:'<<':非法,左操作数的类型为'float'"

不能左移左浮球?为什么会这样?

moo*_*dow 13

你不能留下移位float变量,因为(a)你的FPU通常没有暴露给你的桶形移位器,所以物理上不能生成代码来做到这一点,(b)它甚至意味着什么?基础位表示由多个具有不同含义的字段组成,您真的希望这些位相互渗透吗?

如果你想将该变量中的数字乘以2,那么你应该这样做.

如果你想重新解释float,因为某些类型的左移有意义(例如,一个适当大的无符号整数类型),对于像Carmack的平方根这样可怕的一些黑客攻击,嗯,你也可以这样做,但在现代硬件上它是高度的不太可能你真的需要:认真考虑是否有更好的方法来做你想要的.

  • +1.但是为了迂腐,FPU几乎肯定会*拥有一个桶形移位器,因为为了进行浮点加法,它几乎是必需的. (3认同)
  • @Oli:但即使你可以控制它,它也不会连接到移动整个浮点数,只是尾数......我会澄清。 (2认同)

小智 5

如果你想用 2 的幂快速乘或除浮点数,请查看标准函数 ldexpf。显然有点晦涩:-)。

https://linux.die.net/man/3/ldexpf