zoukankan      html  css  js  c++  java
  • 对原码、反码和补码的理解

    一个字节是8个bit位,也就是8位二进制数。

    1、正整数的原码、反码和补码。

      100的原码:0110 0100

      100的反码:0110 0100

      100的补码:0110 0100

    2、负整数的原码、反码和补码。

      -100的原码:1110 0100

      -100的反码:1001 1011

      -100的补码:1001 1100

    注:

      1、正数的原码、反码和补码表示方式均相同,不需转换。

      2、负数转换成二进制数(也就是原码)在前面要加符号位(1)。

      3、负数的反码,将原码的各位取反,符号位不变

      4、负数的补码,将反码加上二进制1即可。

    补码的由来:

      补码是为了简化减法而出现的。在我们计算减法的时候,将减号看作是负号,再将负数转化为补码求加法。这也是为什么正数的原码、反码和补码是一样的原因(和正数就没有关系)。

      在计算机系统中,数值一律用补码来表示和存储。是因为使用补码可以将符号位和数值域统一处理,同时加减法也可以统一处理。

    例如:

      72 - 53 = 72 + (-53) = 

      72转化为二进制数为:0100 1000

      -53转化为二进制数(原码)为: 1011 0101   反码为: 1100 1010    补码为:1100 1011

      72 + (-53) = 0100 1000 + 1100 1011 =  0001 0011 

      将二进制数0001 0011 转化为十进制数为19(在计算的时候,在最高位也需要进1,但是只有8位,所以只能丢掉向前进的1位)

      公式:被减数 - 减数 = 被减数 + (负的减数) = 被减数的原码 + 负的减数的补码 

    注:

      十进制负整数的转换成二进制,也就是对其十进制正整数转换成二进制,所以十进制负整数表示成二进制就是其补码形式。

  • 相关阅读:
    LeetCode 146
    Codeforces Round #644 (Div. 3) 题解
    AtCoder Grand Contest 044
    约数个数求解+约数求和(唯一分解定理)(遍历map的写法!)
    [蓝桥杯][2013年第四届真题]危险系数(DFS)
    Codeforces Round #674 (Div. 3)(A->D(前缀和出现次数))
    Codeforces Round #673 (Div. 2)B. Two Arrays(贪心)
    Codeforces Round #672 (Div. 2)(A->C2)(B位运算,C贪心,DP)
    质数笔记
    2020 CCPC
  • 原文地址:https://www.cnblogs.com/coolYuan/p/9234634.html
Copyright © 2011-2022 走看看