二进制中1的个数
来源:互联网 发布:ubuntu 桌面u盘路径 编辑:程序博客网 时间:2024/05/16 01:44
题目:写一个函数输入一个整数,输出该二进制表示中1的个数
eg:输入9;9的二进制为:1001;输出为:2(2个1);
代码如下:
#include<stdio.h>//1.前俩种常规解法//2.除法的效率要比移位运算的效率低很多//3.但如果是负数前俩种算法会出现死循环,则需要改变移位的目标,改为去改变flag;//4.最后一种是最优的方法,此规律很难发现,思路如下:int count_one_bit4(int num);//除法、模余int count_one_bit(int num){int count = 0;while (num){if (num % 2)++count;num /= 2;}return count;}//移位、按位与int count_one_bit2(int num){int count = 0;while (num){if (num & 1)++count;num >>= 1;}return count;}//避免死循环的解法(负数)int count_one_bit3(int num){int count = 0;unsigned int flag = 1;while (flag){if (num & flag)++count;flag <<= 1;}return count;}//1.整数减1;(将从右到左的第一个1以及1右边的数做取反操作)//2.减1的结果再与原整数相与;(将上述所说的1右边的数做置0操作)//3.1个二进制中有几个1就可以做几次这样的操作;int count_one_bit4(int num){int count = 0;while (num){++count;num &= (num - 1);}return count;}//测试如下:int main(){printf("count_one_bit:%d\n", count_one_bit(9));printf("count_one_bit2:%d\n", count_one_bit2(9));printf("count_one_bit3:%d\n", count_one_bit3(9));printf("count_one_bit4:%d\n", count_one_bit4(9));return 0;}
1 0
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- MVC编程模式
- #pragma预处理命令
- 读书笔记
- 图解Git
- 根节点区间长度为N的线段树层数的上下限
- 二进制中1的个数
- LeetCode Balanced Binary Tree
- Runtime类中的freeMemory,totalMemory,maxMemory方法,查看内存情况
- springMVC对异常处理的支持
- MyEclipse折叠当前类所有代码快捷键
- 用于企业解决方案的新网络功能与合作伙伴
- 错误:stack around the variable * was corrupted
- JavaScript权威指南_71_第9章_类和模块_9.1-类和原型
- HDU1253 胜利大逃亡 三维BFS