C语言 求一个整数存储在内存中的二进制中 1 的个数
2021/7/12 7:09:22
本文主要是介绍C语言 求一个整数存储在内存中的二进制中 1 的个数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录(涉及知识点)
方法一:先取模,再进行除运算
算数操作符
方法二:与运算、右移、for循环、if判断
位操作符
移位操作符
方法三:whlie循环、与运算 ——最高效的
方法一:先取模,再进行除运算
#include<stdio.h> int main() { int num = 0; scanf("%d", &num); int count = 0; while(num) { if(num % 2 == 1) count++; num = num /2; } printf("二进制中1的个数为:%d\n", count); return 0; }
算数操作符
/ ,只要有double浮点数时,printf用%lf,(默认6位
% ,操作数必须都是整数
方法二:与运算、右移、for循环、if判断
#include<stdio.h> int main() { int num = 0; int count = 0; scanf("%d",&num); int i ; for(i = 0; i <32; i++) { if(1==((num >> i) & 1)) count++; } printf("二进制中1的个数为:%d\n",count); return 0; }
位操作符
- & 按 二进制 位与 。 两个同时为1,才是1。有0全是0
- | 按 二进制 位或 。 两个同时为0,才是0,有1全是1
- ^ 按 二进制 位异或。 两个相同为0,相异为1
移位操作符
1.操作数只能是整数
2.移动的是二进制位
>>:右移操作符 。包括 算术右移与逻辑右移
算术右移:是符号位要一起移动,并且在左边补上符号位
逻辑右移:是将二进制数整体右移,左边补0即可
<<:左移操作符 。左边丢弃,右边补零
Int a=-1
Int b=a>>1
b还是是-1
源码:符号位 (正0负1
反码:符号位不变,其余与源码相反
补码:反码末位+1
方法三:whlie循环、与运算
特点:循环直到num为0,循环多少次,就有多少个1,不用再用 if判断
#include<stdio.h> int main() { int num = 0; scanf("%d", &num); int count = 0; while (num) { num = num & (num - 1); count++; } printf("二进制中1的个数为:%d\n", count); return 0; }
这篇关于C语言 求一个整数存储在内存中的二进制中 1 的个数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19WebSocket入门指南:轻松搭建实时通信应用
- 2024-11-19Nacos安装资料详解:新手入门教程
- 2024-11-19Nacos安装资料:新手入门教程
- 2024-11-19升级 Gerrit 时有哪些注意事项?-icode9专业技术文章分享
- 2024-11-19pnpm是什么?-icode9专业技术文章分享
- 2024-11-19将文件或目录压缩并保留到指定的固定目录怎么实现?-icode9专业技术文章分享
- 2024-11-19使用 tar 命令压缩文件并且过滤掉某些特定的目录?-icode9专业技术文章分享
- 2024-11-18Nacos安装入门教程
- 2024-11-18Nacos安装入门:轻松掌握Nacos服务注册与配置管理
- 2024-11-18Nacos配置中心入门:新手必读教程