算法高薪算法+计算机职称考试数据结构和算法分析

把A变为B需要改变多少位(bit)

2019-06-26  本文已影响0人  半亩房顶

题目

题目的意思就是,如何判断A和B的二进制表示中有多少位(bit)不一样?

思路

这是编程之美当中一道练习题,我也就邯郸学步的想了一个算法:

  1. 先做位与运算 A & B, 得到结果C;
  2. 接着做位或运算 A | B,得到结果D;
  3. 再做一次异或运算,不过操作的数不是 A 与 B,而是 C ^ D , 得到结果E;
  4. 判断结果 E 其二进制表示中1的个数就得到结果啦。

举例说明

为了减少复杂度,用八位二进制为例。设 A = 0010 1011, B = 0110 0101

  1. C = A & B = 0010 0001;
  2. D = A | B = 0110 1111;
  3. E = C ^ D = 0100 1110;
  4. 结果E中有4个1,那么也就是说将A变成B,需要改变4位(bit)。

至于如何判断E的二进制表示中有几个1,请参考https://www.jianshu.com/p/3e54f26c11a4

算法原理

  1. A & B,得到的结果C中的1的位表明了A和B中相同的位都是1的位;
  2. A | B, 得到的结果D中的1的位表明了A和B在该位至少有一个为1的位,包含了A 与 B 都是1的位数,
  3. 经过前两步的位运算,,C 中1的位表明了A 和 B在该位都是1,D中为0的位表明了A 和 B 在该位都是0 ,所以进行第三步C ^ D,E 中为1的位表明了A 和 B不同的位。

以上,欢迎大家指点、交流。


欢迎大家关注我的公众号


半亩房顶
上一篇 下一篇

猜你喜欢

热点阅读