C程序设计语言练习题之 2-9
来源:互联网 发布:北航软件工程硕士 编辑:程序博客网 时间:2024/05/03 09:07
原题是利用整数x &x-1可以消除掉x的二进制字符串右侧第一个“1”的原理,反复进行&,最终将x变为零。而反复的次数就是x这个字符串中“1”出现的次数。
原先想利用while进行循环,结果发现while存在一个问题:最后一个“1”被消除掉,x为0后,此次循环将不进行,导致最终的循环次数比“1”的实际数量要少1。虽然可以在初始化或返回值时+1的方法,但并不合理,所以舍弃了while而使用for进行循环。但while的部分还作为备注留在函数中。
源代码:
#include <stdio.h>int bitcount(int x);int main(){int x = 10000;//此句定义需要处理的数值,可以随便改动 printf("%d\n", bitcount(x));}int bitcount(int x){int b;/* while (x &= (x - 1) )++b;*///尝试了一下使用while的语句,结果发现并不合理。因为while在x值等于零的时候直接退出循环,会导致b最终比真实值要小1 for (b = 0; x != 0; x &= (x - 1))//函数的关键。b初始化为0,用x和x-1的二进制值进行&,每次都会消除掉x二进制值右侧的一个1,同时b+1,当x最后变为零的时候,返回b值,也就是b二进制字符串中1的数量 b++;return b; }
0 0
- C程序设计语言练习题之 2-9
- C程序设计语言练习题之 2-2
- C程序设计语言练习题2-2
- c 程序设计语言 第二版 练习题 5-2
- C程序设计语言练习题.第一章
- C程序设计语言练习题之 1-19, 我的编程
- C程序设计语言_Chapter1实例和练习题
- c 程序设计语言 第二版 练习题 4-10
- c 程序设计语言 第二版 练习题 4-13
- c 程序设计语言 第二版 练习题 4-12
- c 程序设计语言 第二版 练习题 5-1
- c 程序设计语言 第二版 练习题 5-3
- c 程序设计语言 第二版 练习题 5-4
- c 程序设计语言 第二版 练习题 5-5
- c 程序设计语言 第二版 练习题 6-3
- c 程序设计语言 第二版 练习题 6-4
- c 程序设计语言 第二版 练习题 6-5
- C程序设计语言 Exercise 2-9
- redis系列-redis的使用场景
- vxworks-6.6的安装波折
- hdu4415 不错的想法题
- BF和KMP算法
- manifest文件
- C程序设计语言练习题之 2-9
- 平衡二叉树
- [学习记录]KEPWare学习记录4
- 转载_gcc -lpthread和gcc -pthread的区别
- 项目敏捷(1)--背景
- Spring控制反转+依赖注入
- [最大流] hdu 3572 Task Schedule
- SCJP小结
- 程序员面试题精选100题(52)-C++面试题(1)