【c语言】 写一个函数返回参数二进制中 1 的个数
来源:互联网 发布:手机管理淘宝店铺 编辑:程序博客网 时间:2024/05/18 02:19
如何将输入的数转化为二进制,统计其中 1 的个数。
1.将十进制转换为二进制是将数字不断除2取余,在这里我将余数为1的情况进行累加,可以得出结果。
#include<stdio.h>int main() { int num; int s=0,yus=0,count=0;//s为商,yus为余数 printf("请输入一个数字:>"); scanf("%d",&num); for(s=num;s>=1;) { yus=s%2; s=s/2; if (yus==1) { count++; } } printf("%d\n",count); return 0; }
2.上述程序未考虑数字为负数的情况。要考虑负数,所以我引入了按位与&(数字在二进制情况下对应位进行与运算,同为1时输出1)和右移>>(数字每右移一次左边按符号位的情况进行补位,右移相当于数字除以2)。第i次,当数字和1进行与运算结果为1时,它的二进制的第i为为1,将1的情况累加,得出结果。
#include<stdio.h>int main() { int num; int count=0,i=32; printf("请输入一个数字:>"); scanf("%d",&num); while(i--) { if (num&1==1)//按位与&,同为1时出1 { count++; } num=num>>1;//右移1位,相当于num/2 } printf("输出数字在二进制中 1 的个数:") ; printf("%d\n",count); return 0; }
3.为了更进一步的完善程序,只用了与运算。其中关键的表达式为 num&(num-1); 以12为例结果是2.
//输入12
// 0000 0000 0000 1100 (12)
//& 0000 0000 0000 1011 (11)
// 0000 0000 0000 1000 (8)------1
//& 0000 0000 0000 0111 (7)
// 0000 0000 0000 0000 (0)------2
#include<stdio.h> int main() { int num; int count=0; printf("请输入一个数字:>"); scanf("%d",&num); while(num) { count++; num=num&(num-1);//按位与&,同为1时出1 } printf("输出数字在二进制中 1 的个数:") ; printf("%d\n",count); return 0; }
本文出自 “娜些维度的雪” 博客,请务必保留此出处http://1536262434.blog.51cto.com/10731069/1699689
0 0
- 【c语言】 写一个函数返回参数二进制中 1 的个数
- C语言中写一个函数返回参数二进制中 1 的个数
- C语言实现谷歌面试题:写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中1的个数
- 写一个函数返回参数二进制中1的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中1的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中1的个数
- 写一个函数返回参数二进制中1的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 【c语言】 交换两个整形变量的值(要求不创建临时变量)
- 【c语言】 寻找十个整数中的最大值
- HTML5视频直播及H5直播扫盲
- JSP基础语法
- 动态代理举例及详细解析
- 【c语言】 写一个函数返回参数二进制中 1 的个数
- 【c语言】 输出一个整数的每一位
- 【c语言】 将数组A中的内容和数组B中的内容进行交换。(数组一样大)
- 【c语言】 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值。
- Forfiles命令详解
- 利用Spark解析Tomcat日志,并将统计结果存入Mysql数据库
- 【c语言】       小游戏——猜字游戏
- 【c语言】 模拟实现printf,要求功能: my_printf("dc\ts\ndc\ndc\ts!", ...)
- #247 Segment Tree Query II