修改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…进行与运算,再相加,得到最后结果
示例: