原码、反码、补码以及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;
}
相关推荐
潇洒畅想几秒前
1.1 从∑到∫:用循环理解求和与累积
java·数据结构·python·算法
爱学习的小囧2 分钟前
VCF 9 实验室网络部署全攻略:从硬件连接到配置实操
开发语言·网络·php
liliangcsdn13 分钟前
LLM如何与mcp server交互示例
linux·开发语言·python
军军君0119 分钟前
Three.js基础功能学习十五:智能黑板实现实例二
开发语言·前端·javascript·vue.js·3d·threejs·三维
维齐洛波奇特利(male)22 分钟前
@Pointcut(“execution(* com.hdzx..*(..))“)切入点与aop 导致无限循环
java·开发语言
郝学胜-神的一滴30 分钟前
[简化版 GAMES 101] 计算机图形学 04:二维变换上
c++·算法·unity·godot·图形渲染·unreal engine·cesium
ZC跨境爬虫30 分钟前
海南大学交友平台开发实战day7(实现核心匹配算法+解决JSON请求报错问题)
前端·python·算法·html·json
爱编码的小八嘎31 分钟前
C语言完美演绎7-7
c语言
来日可期131432 分钟前
C/C++ 反常识记录(1)—— 那些容易踩坑的语法细节
c语言·开发语言·c++
计算机安禾35 分钟前
【数据结构与算法】第41篇:图论(五):拓扑排序与关键路径
c语言·数据结构·c++·算法·图论·visual studio