csapp深入了解计算机系统配套datalab-handout实验

修改bits.c的副本,使其通过所有在不违反任何编码准则的情况下在btest中进行测试。
(2)源程序清单或者主要伪代码;
①.bitAnd:
这个函数是将两个数x,y进行与运算。根据以前学的数电的知识,利用摩根定理,/(x&y)=x|y,再次求反可得结果
在这里插入图片描述
②.getByte:
要得到X的第n个字节。只需要简单的把留的字节移到最右端,再与0xff相与即可
在这里插入图片描述
③.logicalShift
实现逻辑右移。即在右移的过程之中在左端都填零而不是填符号位。先求出一个左端有n个0,右端是32-n个1的常数,得到这个常数之后就可以和x进行算术右移后的结果相与,这样左端的n位就=0,满足逻辑右移
在这里插入图片描述
④.bitCount
计算1的个数。也就是把32位的数都加起来。可以通过移位计算的方法,其中也有分治的思想在里面。先分成两位两位的计算,x和0101…01相与(也就是看x的第1,3,。。n-2位是不是1),x向右移一位再和0101.。01与(同理,是为了看x的0,2,4.。,n-1是不是1),前面两个计算得到的结果加起来,再把这个结果看成16个两位的数,把这两个数加起来就是最终1的个数。
如表格所示,每格=上一行的两个数字之和,想要执行这样的加法,就要对应和0x55555555或0x33333333…进行与运算,再相加,得到最后结果

示例:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值