首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-10-15 
看深入理解计算机系统,关于移位负数乘法深入理解计算机系统,关于乘与常数。p64,练习题2.40:比如 x * 6, 可

看深入理解计算机系统,关于移位负数乘法
深入理解计算机系统,关于乘与常数。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))
不是我说,这么简单???就是把符号移到外边???


沒錯...

热点排行