题目一 写一个函数返回参数二进制中 1 的个数 比如: 15 0000 1111 4 个 1 程序原型: int count_one_bits(unsigned int value) { // 返回 1的位数 }
- 分析
题目可以看出,我们需要先将十进制数转化为二进制一位一位与1比较 - 思路
通常我们使用while循环,将十进制转换为二进制,然后判断其位数是否为1,为1则count++
不过如果遇到负数,那么就会出现问题,所以我们使用for循环32位,根据判断 value & (1 << i) (全1为1)则count++ - 实现
int count_one_bits(unsigned int value) { int count = 0; for (int i = 0; i < 32; i++) { if (value & (1 << i)) { count++; } } return count; }
题目二 获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
- 分析
需要转换为二进制 - 思路
while循环以实现,得出二进制的位数
for循环与上题相同,增加判断位数奇偶
(tmp >= 0) ? count : 32 正负判断,负数左边全为1 - 实现
void bitSplit(int value)