`
ai_longyu
  • 浏览: 477752 次
社区版块
存档分类
最新评论

判断一个整数的二进制位中有多少个1

 
阅读更多

循环: x = x & ( x - 1 ); count++; 直到x为0为止。该方法的时间复杂度是O(m)

在此,不妨把x的二进制位表示为
x=an-1an-2...a0。
按从低位到高位的顺序,不失一般性,假设x的第i位为第一个为1的二进制位,即:ai=1。此时有:
x =an-1an-2...ai+1100...0 <1>
(x-1) =an-1an-2...ai+1011...1 <2>
很明显,从式1和式2可以得出,在第一次 x & (x-1) 后:
x=an-1an-2...ai+1000...0
之后重复同样操作,直到x的二进制位中没有1为止
从上面可以看出,每执行过一次 x & (x-1) 后,都会将x的二进制位中为1的最低位的值变为0,并记数加1。
目前而言,一个整数最大64bit,所有三种方法执行起来都可以认为是0(1)。

分享到:
评论

相关推荐

    判断32位无符号整数二进制中1的个数

    判断32位无符号整数二进制中1的个数,与大家分享下。不是原创

    如何判断一个整数的二进制中有多少个1

    代码如下:// 判断一个整数的二进制位中有多少个1void totalOne(int x){ int count = 0; while(x) { x = x & ( x – 1 ); count++; } printf(“count = %d/n”, count);}循环: x = x & ( x – 1 ); count++; ...

    统计整数的二进制表示形式中有几个1(java实现)

    统计整数的二进制表示形式中有几个1(java实现),代码中有三种方法,分别是利用除、余的方法,位运算,以及利用“与”运算的方法。其中第三种方法效率最高,二进制数中有几个1,算法中的循环内的运算就执行几次。

    e语言-整数型到二进制文本

    整数型到二进制文本.版本 2 .子程序 _按钮1_被单击 信息框 (整数型到二进制文本 (12345678), 0, ) .子程序 整数型到二进制文本, 文本型 .参数 整数, 整数型 .局部变量 文本, 文本型 .局部...

    二进制图文详解

    如上的与运算是一个有意义的运算: 意义在于k是数字n的低8位数字!!m是一个分割模板,称为Mask(面具) 案例: int n = 0x14d751ea;//16简写(缩写)的2进制 int m = 0xff;//255 int k = n&m; //输出 n m k 的2...

    剑指offer面试题15. 二进制中1的个数(位运算)

    请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。 思路 详见链接 代码 class Solution: def hammingWeight(self...

    二进制加减法模拟程序

    输入两个整数,求出它们各自的原码,反码,补码,经过加减运算后的结果,并判断是否溢出

    判断一个整数是否为回文数

    判断一个整数是否为回文数,回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。随意找一个十进制的数,把它倒过来成另一个数,再把这两个数相加,得一个和数,这是第一步;然后把这个和数倒过来,与...

    C语言十进制转二进制代码实例

    用C语言实现将十进制转化为二进制,并统计转换后的二进制码中1的个数。 #include int binaryNum[16]; //存放转换后得到的二进制码 int count=0; //计数十进制整数被2除的次数 int oneCount=0; //得到的二进制码中1...

    ip地址识别

    P地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),...

    C#面试算法归结.txt

    该文档中包含的算法是C#常考到的经典算法,希望对一些参加面试的朋友有所帮助!

    求出10万以内的所有素数,并输出到 一个文本文件中,每行文本只包含一个素数数据;然后再判断这些素数中哪些是由素数拼接而成的,全部打印出来,并统计个数。

    一个文本文件中,每行文本只包含一个素数数据。 2. 编写程序求出10万以内的所有素数,然后再判断这些素数中 哪些是由素数拼接而成的。例如素数23就符合条件, 23本身是素数,其由素数2,和素数3拼接(连接)组成...

    TCL(Tool Command Language)练习题及答案

    9、编写一个TCL脚本,将一个整数转换为二进制表示。 10、编写一个TCL脚本,判断一个整数是否为素数。 11、编写一个程序,计算从1到100的所有偶数的和。 12、找到一个字符串中出现次数最多的字符 13、找到...

    c程序设计习题参考(谭浩强三版)习题参考解答

    11.3编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num,name,score[3],用主函数输入这些记录,用print函数输出这些记录。 95 11.4在上题的基础上,编写一个函数input,...

    实现数字签名算法(DSA),Hash算法的实现C语言

    也即不可能只填充一个二进制位,至少是 8 个二进制位(一个字节)。因此最少填充 1 个字节,最多填充 64 个字节(64*8=512)。 在SHA1中,为了HASH小于2^64长度的输入消息,先对消息m的长度进行处理,判断补0后是...

    数据结构第5次作业.docx

    一、查找 1. 算法设计题 :已知n元顺序表a0, a1, … , an-1按关键字...提示:对于C语言32bit宽的unsigned类型,可以采用16进制形式来实现基数排序,即32bit共有8个16进制位,每个16进制位进行一趟分配和收集,共8趟。

    javascript循环

    9. 在一个笼子里面有鸡和兔两种动物,已知有30个头和90只脚,计算鸡和兔分别有多少只 10. 输出100以内所有质数(质数是只能被1和本身整除的数字) 11. 输入一个十进制数字,输出对应的二进制数字

    datalab实验报告.pdf

    只使用限制种类和数量的位运算实现:返回整数位与运算结果,返回第 n 个字节的值,实现逻辑右移,得到二进制数里的位 1 的个数,返回! x 即,当 x 为 0 的时候返回 1,否则返回 0,返回补码表示的最小整数,判断一个...

    汇编课程设计之简单计算器的设计(四则运算)

    首先要对输入的表达式进行处理,将读入的一个个字符转化为数字,二进制要变为十进制整数。其次是对(,),+,-,*,/的优先级的判断,本程序没有采用堆栈判断优先级的做法,而是通过两个子程序实现,一个子程序可以...

Global site tag (gtag.js) - Google Analytics