我的问题很简单:我可以通过2 * 10
进行(2 << 2) + 2
移位和添加,但我不知道如何通过移位和添加获得2.2 * 10
。任何建议将非常感谢。
-khan_gl
答案 0 :(得分:2)
这有效:
2.2 + 2.2 + 2.2 + 2.2 + 2.2 + 2.2 + 2.2 + 2.2 + 2.2 + 2.2 + (0 << 1)
除了开玩笑,你不能因为你不能在C ++ / C中移动浮点数。好吧,你可以(通过令人讨厌的打字),但是你会遇到未定义的行为。
此外,这样做没有意义。如果你正在进行乘法,那么只需使用*
。编译器会将其转换为最有效的形式。
答案 1 :(得分:1)
如果我理解你的问题,
2.2 = 2 + 2/10
因此,2.2 * 10 = 2 * 10 + 2 * 10/10 = 2 * 10 + 2 = 22.
你可以用移位和减法进行除法。
答案 2 :(得分:1)
在现代CPU上,浮点数以“IEEE 754”格式表示。
IEEE 754浮点运算的核心是位移和整数算术。如果您有耐心,可以在C中编写一个简单的IEEE 754 ALU实现。您可能会发现这个主题很有趣: