读书人

瞥深入理解计算机系统关于移位负数乘

发布时间: 2013-10-15 16:47:37 作者: rapoo

看深入理解计算机系统,关于移位负数乘法
深入理解计算机系统,关于乘与常数。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))


[解决办法]

引用:
汗一个>_<,我搞错了_,x*6?=?x*2*2?+?x*2?=?(x<<2)+(x<<1);这个是对的。


?x*-6?=?-(x*6)?=?-(?(x<<2)?+?(x<<1))
不是我说,这么简单???就是把符号移到外边???


...

读书人网 >C语言

热点推荐