2015小米暑期实习笔试题(二进制)
1、题目要求
世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?
输入:
1999 2299
输出:
7
2、题目分析
题目要求计算出两个整数二进制中有多少个bit位不同,首先要考虑的是二进制的位运算,位运算有下面六种
(1) 按位与 & 相应的二进制位都为1,则该位的结果值为1,否则为0
(2) 按位或 | 相应的二进制位中只要有一个为1,该位的结果值为1
(3) 取反 ~ 一元运算符,用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1
(4) 亦或 ^ 相应的二进制位如果相同,则结果值为0,如果不相同则为1
(5) 左移 << 二进制整体左移,右边空出的位用0填补,高位左移溢出则舍弃该高位
(6) 右移 >> 右端的低位被舍弃,对于无符号数,高位补0,对于有符号数,具体补0还是1,要看系统
注意看第4中运算,恰好符合题目的要求,就是要找到不相同的二进制位,对这两个数进行亦或运算,得到的结果就是不相同的二进制位能组成的数值,那么接下来就是计算一个整数的二进制中1的个数
3、示例代码
#coding=utf-8
a = 1999
b = 2299
c = a ^ b
count = 0
while c > 0:
d = c &1
if d > 0:
count += 1
c = c >> 1
print count