看深入理解计算机系统,关于移位负数乘法
深入理解计算机系统,关于乘与常数。p64,练习题2.40:
比如 x * 6, 可以用移位 + 加法实现;(x << 3) + ( x << 2);
问题是这里用两个移位加一个加法实现x * 6;
问题 如何用两个移位一个加法实现 x * -6 ???
你这个题本身都是错的.
比如 x * 6, 可以用移位 + 加法实现;(x << 3) + ( x << 2); 这个条件都是不成立的.
因为计算的原理都是一些逻辑运算, 与,或,非.
所以乘除都可以转换成基本运算.
原理是这样的: x每向左移动一位, 相当于乘以2. 所以你就要相办法把*N,使用分配律把算式分解, 比如你的例子: x*6 = x*4 + x*2 = x*2*2 + x*2
x*6 = x*2*2 + x*2 = (x<<2)+(x<<1);
同理, x*-6 = -(x*6) = -( (x<<2) + (x<<1))
[解决办法]