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

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

  hot3.png

  题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。

  思路:先判断是否为0,如果非0则至少有一个1,设置一个变量计数1的个数,然后将该二进制数减1,减完之后与原来的数做与运算,这样这个1就会消失。重复这样操作,每次这个变量加1,直到所有1消失。

  例: 1100。判断非0,所以变量+1,然后减1,就变为1011,再与1100做与运算,得1000,变量再+1,然后1000再减1,得0111,再与1000做与运算,得0,结束。得到2个1。

  测试用例

  1.正数(包括边界值1、0x7FFFFFFF)。
  2.负数(包括边界值0x80000000、0xFFFFFFFF)。
  3.0

#include
using namespace std;int NumberOf1(int n){ int count = 0; while (n) { ++count; n = (n - 1) & n; } return count;}//测试void test1(){ int n1 = 1; int n2 = 0x7FFFFFFF; int count1 = NumberOf1(n1); int count2 = NumberOf1(n2); cout << count1 << endl; cout << count2 << endl;}void test2(){ int n1 = 0x80000000; int n2 = 0xFFFFFFFF; //取反加1 int count3 = NumberOf1(n1); int count4 = NumberOf1(n2); cout << count3 << endl; cout << count4 << endl;}void test3(){ int n = 0; cout << NumberOf1(n) << endl;}int main(){ test1(); test2(); test3(); return 0;}

 

  相关题目

  
  题目:用一条语句判断一个整数是不是2的整数次方。

  思路:一个正数如果是2的整数次方,那么它的二进制表示中有且只有一位是1,而其他所有位都是0。根据前面的分析,把这个整数减去1之后再和它自己做与运算,这个整数中唯一的1就会变成0.

  题目:输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n。比如10的二进制表示为1010,13的二进制表示为1101,需要改变1010中的3位才能得到1101.

  思路:第一步求这两个数的异或,不同的位就会为1,第二步统计1的个数。

  举一反三
  把一个整数减去1之后再和原来的整数做位与运算,得到的结果相当于是把整数的二进制表示中的最右边一个1变成0,很多二进制问题都可以用这个思路解决。

转载于:https://my.oschina.net/134596/blog/1794979

你可能感兴趣的文章
(转)No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VA 解决办法
查看>>
GCD
查看>>
淘宝UWP--自定义图片缓存
查看>>
Javascript构造函数
查看>>
php--某个字符在字符串中的位置比较
查看>>
一个类有两个方法,其中一个是同步的,另一个是非同步的; 现在又两个线程A和B,请问:当线程A访问此类的同步方法时,线程B是否能访问此类的非同步方法?...
查看>>
[LeetCode] Maximum Product of Word Lengths 单词长度的最大积
查看>>
socket通信中select函数的使用和解释
查看>>
JAVA Map集合类简介
查看>>
c++实现gray code(格雷码)
查看>>
Spark1.4.1 编译与安装
查看>>
epub显示特殊字体
查看>>
JDK各个版本的新特性jdk1.5-jdk8
查看>>
ZOJ 3529 A Game Between Alice and Bob(博弈论-sg函数)
查看>>
zoj 2822 Sum of Different Primes (01背包)
查看>>
Directx11学习笔记【三】 第一个D3D11程序
查看>>
UVa 11292 - Dragon of Loowater
查看>>
【Android】3.15 短串分享功能
查看>>
火星人乘坐核动力飞船回故乡
查看>>
怎么限制Google自己主动调整字体大小
查看>>