首页 > 编程语言 >奇偶校验算法——判断二进制数中1的个数

奇偶校验算法——判断二进制数中1的个数

时间:2022-09-25 14:44:21浏览次数:53  
标签:二进制 res 个数 奇偶校验 int 0x33333333 数中

方法1:

时间复杂度:O(logn) n为二进制数的值

 

int n;
    int res=0;
    scanf("%d",&n);
    while(n!=0){
        res+=(n&1);
        n>>=1;
    }
    printf("%d",res);

 

 

方法2:

时间复杂度:O(m) m为二进制数中1的个数

 

public class Solution {
    public int hammingWeight(int n) {
        int res=0;//初始化数量统计变量 res
        while(n!=0)//循环消去最右边的 1 ,当 n = 0 时跳出
        {
            n=n&(n-1);//消去数字 n 最右边的 1 
            res++;// 统计变量加 1 
        }
        return res;//返回统计数量 res 
    }
}

 

 

方法3:

时间复杂度:

i = i - ((i >> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
i = (i + (i >> 4)) & 0x0f0f0f0f;
i = i + (i >> 8);
i = i + (i >> 16);
i = i & 0x3f;

第一步:求出每两位二进制数中1的个数,并替代这两位二进制数

第二步:此时每两位二进制数表示的是原本这两位二进制数中1的个数,所以将他们两两相加合并

代码如下:

i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
i = (i + (i >> 4)) & 0x0f0f0f0f;
i = i + (i >> 8);
i = i + (i >> 16);

第三部:合并完成,最终得到的就是1的个数

 

标签:二进制,res,个数,奇偶校验,int,0x33333333,数中
From: https://www.cnblogs.com/yccy/p/16727830.html

相关文章

  • 什么是二进制?
    二进制:逢二进一(计算机数据使用的)为什么要用二进制?只需要0和1就可以表示开和关10进制:0-916进制:0-9A-F8进制:0-7常见的存储单位最小单位是位即bit表示信息的最小......
  • 二进制数在计算机中的存储和计算
    原码反码补码先讲个道理:/时钟:在一个圆形的时钟中,我们以12点为0点,此时,时间变成了0-11(十二个时刻),这个12称为模以8位二进制为例,我们可以把0-255看成一个周期(到256时溢出......
  • 奇偶校验
    1、什么是奇偶校验校验其实就是为了验证数据正确性,奇偶校验就是计算发送的二进制数据中1的个数;奇校验:发送的二进制数中1的个数为奇数个1;偶校验:发送的二进制数中1的个数......
  • 二进制和位运算,以及进制的转换
      有些语言用0b111来表示二进制数111。但至少C没有二进制常数表示方法,高版本的编译器支持0b表示二进制数例子:intnum1=210;//十进制intnum2=01010;//......
  • 二进制安装JDK和Tomcat
    OracleJDK的二进制文件安装https://www.oracle.com/java/technologies/java-se-glance.html#官网下载地址[root@rocky8~]#tarxfjdk-8u341-linux-x64.tar.gz-C......
  • 脚本二进制编译安装Mysql
    mysql二进制安装脚本部署目录mysql二进制安装脚本部署单实例使用函数的单实例使用函数的单实例或者多实例单实例[root@localhost~]#mkdirmysql//创建存......
  • 教你如何将二进制文件导入到数据库
    教你如何将二进制文件导入到数据库1.1现网业务场景源数据推送二进制流-->解析二进制-->解析后的数据导入数据库为了模拟生产的业务场景,客户提供了一个二进制文件及......
  • 如何使用 JavaScript 解决二进制间隙
    如何使用JavaScript解决二进制间隙在编码训练营4个月后,我决定开始做数据结构和算法问题,为我的技术面试做准备。我使用的一些网站是:可编码性黑客等级有什么比......
  • 有符号二进制txt导入matlab
    clc;clear;a=textread('E:/output.txt','%s');%输入txt文件m=N;%Nbitsn=length(a);%需要转换的数字个数Qin0=zeros(n,1);fori=1:nQin0(i)=bin2......
  • 二进制到汇编:进制,原码反码补码,位运算,通用寄存器,内存一套打通
    1.语言1.1机器语言人和人沟通的桥梁:语言人与计算机打交道-->学习计算机的语言-->什么是机器语言#我们目前主流的电子计算机!状态:0和1#最早的程序员:穿孔卡带!加......