原码、反码、补码以及lowbit运算

原码、反码、补码以及lowbit运算

原码:

可以用来计算正数加减,正数的原码、反码、补码都一样。

第一位为符号位,符号位0为正数,1为负数(32位字符,这里用4位来举例子,后面皆是用4位来举例子,其中第一位是符号位)。

cpp 复制代码
1 1 1 1(-7)
1 1 1 0(-6)
1 1 0 1(-5)
1 1 0 0(-4)
1 0 1 1(-3)
1 0 1 0(-2)
1 0 0 1(-1)
1 0 0 0(-0)
0 0 0 0(0)
0 0 0 1(1)
0 0 1 0(2)
0 0 1 1(3)
0 1 0 0(4)
0 1 0 1(5)
0 1 1 0(6)
0 1 1 1(7)

反码:

反码的来源:

由于原码中正数(1)与负数(-1)计算错误,引入反码(ones complement),负数的反码=原码按位取反。

cpp 复制代码
1 0 0 0(-7)
1 0 0 1(-6)
1 0 1 0(-5)
1 0 1 1(-4)
1 1 0 0(-3)
1 1 0 1(-2)
1 1 1 0(-1)
1 1 1 1(-0)
0 0 0 0(0)
0 0 0 1(1)
0 0 1 0(2)
0 0 1 1(3)
0 1 0 0(4)
0 1 0 1(5)
0 1 1 0(6)
0 1 1 1(7)

补码:

补码的来源:

由于原码中正数(5)与负数(-3)计算错误,答案都有正确答案差一,引入补码(two's complement),负数的二进制表示=补码=反码➕1,

计算机里都是通过补码来存储信息的。

cpp 复制代码
1 0 0 0(-8)
1 0 0 1(-7)
1 0 1 0(-6)
1 0 1 1(-5)
1 1 0 0(-4)
1 1 0 1(-3)
1 1 1 0(-2)
1 1 1 1(-1)
0 0 0 0(0)
0 0 0 1(1)
0 0 1 0(2)
0 0 1 1(3)
0 1 0 0(4)
0 1 0 1(5)
0 1 1 0(6)
0 1 1 1(7)

lowbit运算:

cpp 复制代码
int lowbit(int x){
      return x&(-x);
}

lowbit运算的返回值:

lowbit运算返回x二进制中最低位的1和后面的0所组成的十进制数。

lowbit运算处理的问题:

如何求一个数二进制表示含1的个数?

1、没有使用lowbit优化,会一直向前移动。

cpp 复制代码
#include<iostream>
using namespace std;
int main(){
    int n,cnt;
    cin>>n;
    while(n){
        if(n&1==1){
            cnt++;
        }
        n=n>>1;
    }
    cout<<cnt;
    return 0;
}

2、使用lowbit优化,每次减去上一个数的lowbit会抹去上个的最后一位一会加快运行速度,不会一直向前移动就可以统计出一个数二进制中含一的个数。

cpp 复制代码
#include<iostream>
using namespace std;
int lowbit(int x){
    return x & -x;
}
int n;
int main(){
    cin>>n;
    while(n){
        int x;
        cin>>x;
        int res=0;
        while(x){
            x-=lowbit(x);
            res++;
        }
        n--;
        cout<<res;
    }
    return 0;
}
相关推荐
fish_xk几秒前
map和set
java·开发语言
汉克老师8 分钟前
GESP2025年3月认证C++五级( 第三部分编程题(2、原根判断))
c++·算法·模运算·gesp5级·gesp五级·原根·分解质因数
李崧正15 分钟前
Java技术分享:Lambda表达式与函数式编程
java·开发语言·python
老了,不知天命17 分钟前
鳶尾花項目JAVA
java·开发语言·机器学习
BIGmustang19 分钟前
python练手之用tkinter写一个计算器
开发语言·python
winner888127 分钟前
从零吃透C++命名空间、std、#include、string、vector
java·开发语言·c++
数据皮皮侠30 分钟前
上市公司创新韧性数据(2000-2024)|顶刊同款 EIR 指数
大数据·人工智能·算法·智慧城市·制造
WL_Aurora33 分钟前
Python 算法基础篇之链表
python·算法·链表
AI人工智能+电脑小能手35 分钟前
【大白话说Java面试题】【Java基础篇】第26题:Java的抽象类和接口有哪些区别
java·开发语言·面试
科研前沿41 分钟前
纯视觉无感解算 + 动态数字孪生:室内外无感定位技术全新升级
大数据·人工智能·算法·重构·空间计算