• 不得不知道的补码知识


    原文地址:不得不知道的补码知识
    博客地址:http://www.extlight.com

    无论什么编程语言,其代码最终都会被编译解释成计算机可读取和运行的二进制数据。

    其中,数字在二进制数据中可划分成原码、补码和反码。

    表示法

    原码:数值前面增了一位符号位

    例如:10 和 -10 的二进制表示如下:

    # 10 的原码
    0000 1010
    
    # -10 的原码
    1000 1010
    

    其中,最高位表示符号位,0 表示正数,1 表示负数。

    反码:在原码的基础上,符号位不变,其余位取反

    继续以上边的 -10 为例:

    # -10 的反码
    1111 0101
    

    补码:负数的补码为反码加1,正数的补码就是原码本身

    # 10 的补码
    0000 1010
    
    # -10 的补码
    1111 0110
    

    在计算机中,数字是以补码的形式进行存储和运行的。

    补码的意义

    相对于原码,使用补码作为计算机的实际存储方式有 2 个优势:

    1. 可以统一数字 0 的表示。因为 0 既不是正数也不是负数,如果使用原码表示,最高位的符号为难以确定用 0 还是 1 表示。

    如果用补码表示,我们先把 0 当作正数处理,其补码(原码本身)表示如下:

    0000 0000
    

    我们再把 0 当作负数表示,其补码(反码 + 1)表示如下:

    # 原码
    1000 0000
    
    # 反码
    1111 1111
    
    # 补码
    0000 0000
    

    从上边可以看到,以补码表示 0,无论从正数还是负数角度处理,最终数字的二进制表示都是一样的。

    1. 简化加减法的计算。将减法当成加法进行计算,实现正数和负数加法的统一。

    我们以 2 + 3 为例:

    2 的补码: 0000 0010
    3 的补码: 0000 0011
        结果: 0000 0101
    

    结果中的 0000 0101 就是十进制的 5。

    我们以 2 - 3 为例:

     2 的补码: 0000 0010
    -3 的补码: 1111 1101
         结果: 1111 1111   
    

    结果中的 1111 1111 就是十进制中的 -1。

    从上边的例子中我们可知,使用补码表示数字时,我们无需区分正负数,只需将补码进行加法运行即可得出结果。

  • 相关阅读:
    C# 缩略图算法
    2018年上半年软件测试助教小结
    HUST软工1501-1503班第4周作业成绩公布
    HUST软工1501-1503班第2周作业成绩公布
    HUST软工1505班第0周作业成绩公布
    软件质量与测试2018春第0周作业1:开设博客
    Spring boot配置拦截器(Interceptor)和监听器(Listener)
    Hangman Judge UVA
    策略路由 policy routing rt_tables
    汇编及逆向基础杂记
  • 原文地址:https://www.cnblogs.com/moonlightL/p/14831712.html
Copyright © 2020-2023  润新知