二进制中1的个数问题 (超详细)
整数 二进制中1的个数(超详细)
前两天遇到这个问题,第一反应就是%2和>>1这两个操作。
大概思路:
正数:%2,拿到原码(补码)的最右位,对于一个int类型的数进行32次判断,这是比较简单的理解。负数:虽然它的补码需要原码取反加一,但是原码和补码的共同点最右位是一致的,所以%2其实也是可以拿到补码的最右位。
所以这个代码对于整数而言,都是行得通的。
int num = -1;
int count1 = 0;
for (int i = 0; i < 32;i++)
原创
2021-02-05 20:38:28 ·
4552 阅读 ·
2 评论