剑指offer11:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。(进制转换,补码反码)
程序员文章站
2023-11-09 21:37:22
1. 题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 2. 思路和方法 使用移位(<<)和 “| & !”操作来实现。1的二进制是:前面都是0,最后一位为1。每次向左移位一下,使得flag的二进制表示中始终 ......
1. 题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
2. 思路和方法
使用移位(<<)和 “| & !”操作来实现。1的二进制是:前面都是0,最后一位为1。每次向左移位一下,使得flag的二进制表示中始终只有一个位为1,每次与n做位与操作,这样就相当于逐个检测n的每一位是否是1。unsigned int flag = 1;
3. c++核心代码
3.1 位运算
1 class solution { 2 public: 3 int numberof1(int n) { 4 int result = 0; 5 unsigned int flag = 1; 6 while(flag) 7 { 8 if(n&flag) 9 result++; 10 flag = flag<<1; 11 } 12 return result; 13 } 14 };
参考资料
https://blog.csdn.net/qq_28632639/article/details/87966115