本题采用位操作的相关方法:左移(<<)或者右移 (>>)。
无符号整数在计算机中是以二进制方式表示,unsigned int 和 int 一样,都在计算机占了4个字节即32个位。
统计无符号整数的二进制表示中1的个数,遍历这32个位,判断每一位是否为1。将这个整数和1位与(&),若结果为1(或者大于0),则说明整数的最右边的那个位是1。
那其余位怎么判断是否为1呢?
方法一:把1左移到每个位来进行判断,可以用for循环32次。1用无符号整形方式储存,即1u。
unsigned int mask=1u; for(int i=0; i<32; i++) { if((x&(mask<<i)) > 0 ) { total++; } }
方法二:将整数右移,来判断其余位,直至x=0结束循环,输出结果即可。这里也可以用for循环32次,那是