int  NumberOf1(int n) {
         int cnt=0;
         for(int i=0;i<32;++i)
         {
             cnt+=n&1;
             n>>=1;
         }
         return cnt;
     }

将n于1相与,即判断最后一位是否为1,是1则计数为加1,不是加0;
判断完后n向右移1位,判断下一位是否为1;
输入为int类型,总共32位,所以for循环32次;
这样的好处在于不用区分负数和正数,因为只循环32次,没有理会左边补位1还是0.时间复杂度,空间复杂度均为O(1)。