博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
位运算之二进制中1的个数
阅读量:6595 次
发布时间:2019-06-24

本文共 2543 字,大约阅读时间需要 8 分钟。

1 /**  2  参考的剑指offer  3  */  4 #include 
5 6 int numberOf1(int n); 7 int betterNumberOf1(int n); 8 _Bool judgeIs2Cifang(int n); 9 int numberOfTransform(int m, int n); 10 11 int main(int argc, const char * argv[]) { 12 13 int n; 14 int countOf1; 15 int betterCountOf1; 16 _Bool is2Cifang; 17 int transformCount; 18 int transM,transN; 19 20 while (1) { 21 printf("请输入一个整数:\t"); 22 scanf("%d",&n); 23 countOf1 = numberOf1(n); 24 betterCountOf1 = betterNumberOf1(n); 25 is2Cifang = judgeIs2Cifang(n) ? 1 : 0; 26 27 28 29 30 printf("%d\t转换为二进制之后含有1的个数为\t%d\n\n",n,countOf1); 31 printf("%d\t转换为二进制之后含有1的个数为\t%d\n\n",n,betterCountOf1); 32 if(is2Cifang){ 33 printf("%d\t是2的整数次方\n\n",n); 34 }else{ 35 printf("%d\t不是2的整数次方\t\n\n",n); 36 } 37 38 39 printf("输入待相互转化的两个数:\t"); 40 scanf("%d %d",&transM,&transN); 41 transformCount = numberOfTransform(transM, transN); 42 printf("%d和%d转化需要的次数是%d\n\n",transM,transN,transformCount); 43 44 45 46 } 47 48 return 0; 49 } 50 51 52 /** 53 求1的个数 54 55 @param n 所求的数 56 57 @return 传进去的数的二进制形式中1的个数 58 */ 59 int numberOf1(int n){ 60 int count = 0; 61 while (n) 62 { 63 if ((n & 1)){ 64 count ++; 65 } 66 n = n >> 1; 67 68 } 69 return count; 70 71 72 } 73 74 75 /** 76 求一个数二进制形式中1的个数的更优解 77 78 @param n 传进去的待求的参数 79 80 @return 返回的待求参数的二进制形式中1的个数 81 */ 82 int betterNumberOf1(int n){ 83 84 int count = 0; 85 while(n){ 86 count++; 87 //每一次做下列操作都会使得这个待求的数的二进制的形式中少1个1 这样的好处是减少比较的次数 88 n = n & (n-1); 89 } 90 return count; 91 } 92 93 94 /** 95 相关的问题有: 96 1.当判断一个数字a是否是2的整数次方的时候 97 2.当判断给定的2个数m,n; 98 每次改变二进制形式的1个1; 99 100 m要经过几步转变为n的时候会用到异或; 101 异或的结果 的二进制的形式含有几个1 就需要相应的几步转换为对方。102 103 */104 105 106 /**107 判断一个数是否是2的整数次方108 109 @param n 传进去的待求参数110 111 @return 返回的是布尔类型的是否是2的整数次方112 */113 _Bool judgeIs2Cifang(int n){114 115 return (n & (n-1))? 0 : 1;116 }117 118 119 120 /**121 两个数的二进制的形式相互转换的时候需要改动的次数122 123 @param p 参数p124 @param q 参数q125 126 @return 返回p q相互转换所需的次数127 */128 int numberOfTransform(int p, int q){129 130 int count = betterNumberOf1(p ^ q);131 return count;132 133 134 135 }

 

转载于:https://www.cnblogs.com/ITCoderW/p/6108068.html

你可能感兴趣的文章
一周最新示例代码回顾 (4/16–4/22)
查看>>
TCPDUMP快速入门手册
查看>>
【转】Ubuntu13.04配置:Vim+Syntastic+Vundle+YouCompleteMe
查看>>
Nginx学习之二-配置项解析及编程实现
查看>>
[Effective Java]第十一章 序列化
查看>>
[算法导论]红黑树实现(插入和删除) @ Python
查看>>
iPhone开发 数据持久化总结(终结篇)—5种数据持久化方法对比
查看>>
使用ReaderWriterLock类实现多用户读/单用户写同步
查看>>
中国式危机公关9加1策略(第十四章 国外危机应对案例參考)
查看>>
CKEditor上传插件
查看>>
Java 缩放图片工具类,创建缩略图、伸缩图片比例
查看>>
Rebuild Instance 操作详解 - 每天5分钟玩转 OpenStack(37)
查看>>
利用scp传输文件小结
查看>>
面向对象设计模式纵横谈:Factory Method 工厂方法模式(笔记记录)
查看>>
C++使用hiredis连接带密码的redis服务
查看>>
SQL SERVER 批量生成编号
查看>>
thinkjs——一个字段一种数字代表两种状态
查看>>
C++的那些事:类的拷贝控制
查看>>
numpy得到数组的index
查看>>
JSP页面重定向
查看>>