• 原码、反码和补码


    序言

    计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。

    原码反码补码三者一一对应,在各自属性内具有唯一性。

    一. 原码

    什么是原码?

    原码(true form)是一种计算机中对数字的二进制定点表示方法,是有符号数的最简单的编码方式。

    原码表示法在数值前面增加了一位符号位(即最高位为符号位):

    正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。

    原码的优点:简单直观

    例如我们用8位二进制表示一个数,+11的原码为0000 1011,-11的原码就是1000 1011

    原码的缺点:不能直接参加运算,可能会出错

    例如数学上,1+(-1)=0,而在二进制中 0000 0001 + 1000 0001 = 1000 0010
    换算成十进制为-2,显然出错了。
    由于原码的符号位不能直接参与运算,必须和其他位分开,如果用原码进行计算就增加了硬件的开销和复杂性
    二. 反码(源码与补码之间的过渡码)
    什么是反码?
    在计算机内,定点数有3种表示法:原码、反码和补码。
    反码是数值存储的一种,但是由于补码更能有效表现数字在计算机中的形式,所以多数计算机都不采用反码表示数。
    反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外
     数0的反码也有两种形式,即
    [+0]反=00000000B
    [- 0]反=11111111B
    三. 补码
    在计算机系统(包括内存)中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
    补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
    补码的正零与负零表示方法相同。
    [+0]补 = [-0]补 = 0000 0000B
    (1) 已知原码,求补码。
      由[X]原=10110100B知,X为负数。求其反码时,符号位不变,数值部分按位求反;求其补码时,再在其反码的末位加1。
    (2) 已知补码,求原码。
    分析:按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1有方法。
     
    总结:
    正数:原码 = 反码 = 补码
    负数:原码取反加1得补码。
       补码取反加1得原码。
       负数补码与原码相互转换,其运算过程是相同的。
       说明:取反时符号位不变。
     
  • 相关阅读:
    [CEOI2008] order
    Atcoder 2373 Cookie Exchanges
    [POI2011]ROT-Tree Rotations
    bzoj 5216: [Lydsy2017省队十连测]公路建设
    bzoj 5215: [Lydsy2017省队十连测]商店购物
    Codeforces 961 E Tufurama
    [九省联考2018] 秘密袭击coat
    Codeforces 961 D Pair Of Lines
    [八省联考2018] 劈配
    [九省联考2018]一双木棋chess
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/4365770.html
Copyright © 2020-2023  润新知