原码、反码、补码以及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;
}
相关推荐
HXhlx3 小时前
CART决策树基本原理
算法·机器学习
Wect3 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱4 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
肆忆_6 小时前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星10 小时前
虚函数表:C++ 多态背后的那个男人
c++
Gorway10 小时前
解析残差网络 (ResNet)
算法
拖拉斯旋风11 小时前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect11 小时前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript
灵感__idea1 天前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
Wect1 天前
LeetCode 130. 被围绕的区域:两种解法详解(BFS/DFS)
前端·算法·typescript