名企笔试:2015小米暑期实习笔试题(二进制)

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