深入理解计算机系统 练习题2.40 答案与分析

本文深入探讨了位运算表达式的解析方法,通过具体实例详细解释了左移、右移及加减运算如何转换为二进制位操作,适用于理解计算机底层逻辑及优化编程算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

K移位加法/减法表达式
621(x << 2) + (x<<1)
3111(x <<5 ) - x
-621(x << 1) - (x << 3)
5522(x << 6) - (x <<3) - x

第一行6的二进制表示我为0110,所以n=2,m=1
形式A:
x * k = (x << 2) + (x<<1)
形式B:
x * k = x * (232^323 - 212^121) = (x<<3) - (x << 1)
第二行31的二进制表示为11111,所以n=4,m=0
形式A:
x * k = (x<<4) + (x<<3) + (x<<2) + (x<<1) + x
形式B:
x * k = (x <<5 ) - x
这里面比较重要的一点是11111的第一个1的下标是4,最后一个1的下标是0,所以n=4,m=0
当确定了n,m之后就可以根据公式进行计算
第三行-6的二进制表示为-110(补码表示),所以n = 2,m = 1
形式A:
x * k = -((x << 2) + (x<<1))=-(x << 2) - (x << 1)
形式B:
x * k = -( (x<<3) - (x << 1)) = (x << 1) - (x << 3)
第四行55的二进制为110111,所以n=5,m=3
形式A:
x * k = (x * 1 * 252^525) + (x * 1 * 242^424) + (x * 1 * 222^222) + (x * 1 * 212^121) + (x * 1 * 202^020) = (x << 5) + (x << 4) + (x << 2) + (x << 1) + x
形式B:
x * k = (x * 262^626) - (x * 232^323) - (x * 202^020) = (x << 6) - (x <<3) - x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值