整数A和B的二进制表示中有多少位是不同的?.docxVIP

整数A和B的二进制表示中有多少位是不同的?.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?

解法一:举例说明,为了减少复杂度,就使用八位二进制吧。设A=00101011,B=01100101.

1.C=AB=00100001;

2.D=A|B=01101111;

3.E=C^D=01001110;

4.结果E中有4个1,那么也就是说将A变成B,需要改变4位(bit)。至于如何判断E的二进制表示中有几个1,可以采用快速移位与方法。

算法原理如下:

AB,得到的结果C中的1的位表明了A和B中相同的位都是1的位;

A|B,得到的结果D中的1的位表明了A和B在该位至少有一个为1的位,包含了A与B

都是1的位数,

经过前两步的位运算,,C中1的位表明了A和B在该位都是1,D中为0的位表明了A和

B在该位都是0,所以进行第三步。

#includeiostreamusingnamespacestd;intgetNum(intn){if(n==0)return0;intcount=0;

#includeiostreamusingnamespacestd;intgetNum(intn)

{

if(n==0)return0;intcount=0;while(n)

{

n=(n-1);count++;

}

returncount;

}

intmain()

{

intA=43,B=101;

intC=AB;intD=A|B;intE=C^D;

coutgetNum(E)endl;system(pause);return0;

}

解法二:

思路:对于给定的两个数,从最低位开始扫描,分别找到A和B的第一个“1”出现的位置,n1和n2

n1==n2 ,将n1(n2)位置0,继续往高位找;

n1n2, 说明A的n1位为1,但B的n1位为0,num++ ;将A的n1位置0,继续寻找A的下一个1的位置;

n1n2, 同2)反之。代码:

intcount(inta,intb)

{

unsignedintn1,n2,num=0;n1=a-(a(a-1));

n2=b-(b(b-1));

while((n1!=0)(n2!=0))

{

if(n1==n2)

{

a=~n1;b=~n2;

}

else

{

num++;

n1=a-(a(a-1));

n2=b-(b(b-1));

if(n1n2)

{

a=(~n1);

}

else

{

b=(~n2);

}

}

}

while(n1!=0)

{

num++;

n1=a-(a(a-1));

n2=b-(b(b-1));

a=(~n1);n1=a-(a(a-1));}while(n2!=0){

a=(~n1);

n1=a-(a(a-1));

}

while(n2!=0)

{

num++;b=(~n2);

n2=b-(b(b-1));

}

returnnum;

}

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地境外
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档