仅使用移位和添加,通过浮点类型数执行多次

时间:2016-12-17 08:44:58

标签: bit-shift multiplication

如何仅使用移位和添加来执行2.75的乘法运算? 我知道2乘2是通过位移1< 1来完成的。

2 个答案:

答案 0 :(得分:1)

乘以2简单左移。

y = (x << 1) + ...;

乘以0.75,乘以3除以4(右移2)。考虑x==3的值。这导致y==23*0.75的数学运算为2.25。使用(x >> 1) + (x >> 2),结果为1

y = ... + (x+x+x >> 4);

要获得舍入的值(假设为正数),在除法/右移之前加上1/2除数(在这种情况下为4)。

y = ... + (x+x+x + 2) >> 2;

所有在一起:

// y = x*2.75
y = (x << 1) + ((x+x+x + 2) >> 2);

答案 1 :(得分:0)

假设你想将int乘以非整数常量(如2.75),那么你可以将其分解为:

y = x * 2 + x / 2 + x / 4; // y = 2x + 0.5x + 0.25x

可以使用shift表示并添加为:

y = (x << 1) + (x >> 1) + (x >> 2);