今天我去优酷笔试,有道题目我怎么也做不出来,回来查了下。
题目:
一个32位的整数,求该整数转为2进制后1的个数。
原理:
如果x是2的n次方,则这个数一定是1000xx这样的形式(xx表示若干个0),而(x-1)一定是01111xx(xx表示若干个1),所以两者相与之后一定是0.这样对于一个数从右到每次进行x=x&(x-1)操作就会减少一个1,一直到x变成0结束。
今天我去优酷笔试,有道题目我怎么也做不出来,回来查了下。
题目:
一个32位的整数,求该整数转为2进制后1的个数。
原理:
如果x是2的n次方,则这个数一定是1000xx这样的形式(xx表示若干个0),而(x-1)一定是01111xx(xx表示若干个1),所以两者相与之后一定是0.这样对于一个数从右到每次进行x=x&(x-1)操作就会减少一个1,一直到x变成0结束。