如何仅使用移位和添加来执行2.75的乘法运算? 我知道2乘2是通过位移1< 1来完成的。
答案 0 :(得分:1)
乘以2简单左移。
y = (x << 1) + ...;
乘以0.75,乘以3除以4(右移2)。考虑x==3
的值。这导致y==2
。 3*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);