二进制_简学:二进制数制的应用

81de0286ca6a7f34340a9798b519a4b3.png

设现有正整数150,二进制形式为10010110,现有如下题目,求其尽可能简单的解法。

题目一:判断该正整数是否是2的乘方;

解法:

8b7bf2442403939ac00f46eb1474580a.png

由上表可以看出2的乘方的二进制形式只有一个bit为1,因此判断一个正整数A是否为2的乘方,可以判断A&(A-1)是否等于0,若结果为0,则是2的乘方,若不为0则不是2的乘方。

题目二:判断正整数是否能被4整除;

解法:

e3927d5a5e5b6bd11f488a1942b7bce0.png

一个正整数可以将其表示为A=M*8+N;M是A的高位bit组成的数字,N是低三位bit组成的数字,例150=(10010)18*8+6;因为M*8是能被4整除的,因此只需判断N能否被4整除即可,从上式可以看出150的N值不能被4整除,所以该正整数不能被4整除。

题目三:不用乘法器求该正整数*3的结果;

解法:

d69a4972506dd46eca1988ded6059113.png

根据上表一个正整数A*2的结果为将该正整数的二进制左移一个bit位,并低位补0。因此求一个正整数*3的结果根据乘法的基本定律得到:A*3=A*(2+1)=A*2+A,而A*2可以转换为左移补0的动作,因此A*3可以转换为不用乘法器的运算。

题目4:求一个未知整数除以7的余数,该整数的范围为0-255,要求不使用除法器;

解法:该整数的最大可能值为255,因此该整数的二进制形式可以用8个bit位表示X7X6X5X4X3X2X1X0;根据题目二的思想,可以将该整数表示为A=X7*128+X6*64+X5*32+X4*16+X3*8+X2*4+X1*2+X0;

A/7=(X7*128+X6*64+X5*32+X4*16+X3*8+X2*4+X1*2+X0)/7;

A/7=X7*(128/7)+X6*(64/7)+X5*(32/7)+X4*(16/7)+X3*(8/7)+(X2*4+X1*2+X0)/7;

根据除法的基本定律可以知道除法结果=商和余数:

分别计算上式的元素:

2b70da1206833a2a2807af21370e565b.png

根据除法的基本定律可以得出A/7:

余P:X7*2+X6*1+X5*4+X4*2+X3*1+X2*4+X1*2+X0

=X7X6+X5X4X3+X2X1X0(P的最大值3+7+7=17)

商Q:X7*18+X6*9+X5*4+X4*2+X3*1+0

=9*X7X6+X5X4X3

由上式可以看出余数P的最大值可能为17因此余数P还能除以7;

因此真正的余数和商等于:

余:P/7取余p;商:Q+P/7取商q

因为P的值为0-17是有限的值,因此可以枚举求其商和余数:

case(P)

0:q=0;p=0;

1:q=0;p=1;

2:q=0;p=2;

。。。。。

17:q=2;p=3;

得到一个0-255的未知整数除以7的最终结果:

商=Q+q=9*X7X6+X5X4X3+q;余数=p,pq可有case(P=X7X6+X5X4X3+X2X1X0)求得,因此整个运算不需要用到除法器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值