大意描述
给定64位整数,询问其二进制表示下1个个数
思路1
将数据n每次右移一位和1进行&运算来求得二进制中1的个数,对于无符号数来说没有问题,可是对于有符号数问题就大了,极有可能造成死循环。当n为负数时,n右移在最高位补1(为了保证数据为负数),因而最终就会形成死循环。
思路2
利用 n & (n-1)
n & ( n - 1 ) 就是去掉最左边一个 1.
同理的话
判断n是否是2^k的数.
n & ( n - 1 ) 如果结果为 0, 是; 反之, 不是.
n & ( n - 1 ) 就是去掉最左边一个 1.