二进制1的个数

大意描述

给定64位整数,询问其二进制表示下1个个数


思路1

将数据n每次右移一位和1进行&运算来求得二进制中1的个数,对于无符号数来说没有问题,可是对于有符号数问题就大了,极有可能造成死循环。当n为负数时,n右移在最高位补1(为了保证数据为负数),因而最终就会形成死循环



思路2

利用 n & (n-1) 

n & ( n - 1 ) 就是去掉最左边一个 1.

同理的话

判断n是否是2^k的数.

扫描二维码关注公众号,回复: 1277302 查看本文章

n & ( n - 1 ) 如果结果为 0, 是; 反之, 不是.

n & ( n - 1 ) 就是去掉最左边一个 1.


猜你喜欢

转载自blog.csdn.net/m0_38013346/article/details/80411830