zoukankan      html  css  js  c++  java
  • 关于原码、反码和补码的介绍及转化关系

    计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,是计算机中对数字的二进制定点表示方法。符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。下面依次介绍并给出相互的转换关系:

    原码:

    简单直观;例如,我们用8位二进制表示一个数,+11的原码为00001011,-11的原码就是10001011。但参加运算可能出错。例如数学上,1+(-1)=0,而在二进制中,00000001+10000001=10000010,换算成十进制为-2,显然出错了。

    反码:

    反码通常是用来由原码求补码或者由补码求原码的过渡码。反码跟原码是正数时,一样;负数时,反码就是原码符号位除外,其他位按位取反。

    补码:

    在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

    1、一个负整数(或原码)与其补数(或补码)相加,和为模。
    2、对一个整数的补码再求补码,等于该整数自身。
    3、补码的正零与负零表示方法相同。
    总之,正整数的补码是其二进制表示,与原码相同。求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。
     
    即正整数的原码反码补码一样;负整数的反码是除了原码符号位其他位全部取反,补码是反码加一。

    转换:

    由于正数的原码、补码、反码表示方法均相同,不需转换,所以仅以负数情况分析。
    (1) 已知原码,求补码。
    例:已知某数X的原码为10110100,试求X的补码和反码。
    解:由[X]原=10110100知,X为负数。求其反码时,符号位不变,数值部分按位求反;求其补码时,再在其反码的末位加1。
    1 0 1 1 0 1 0 0 原码
    1 1 0 0 1 0 1 1 反码(符号位不变,数值位取反)
    1 1 0 0 1 1 00 补码 (补码再加一)
    故:X的补码=11001100,X的反码=11001101。
    (2) 已知补码,求原码。
    分析:按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1 有方法。
    例:已知某数X的补码11101110,试求其原码。
    解:由X的补码=11101110知,X为负数。
    采用逆推法
    1 1 1 0 1 1 1 0 补码
    1 1 1 0 1 1 0 1 反码(末位减1)
    1 0 0 1 0 0 1 0 原码(符号位不变,数值位取反)
    即为所求。
  • 相关阅读:
    JavaScript基础
    CSS——网页的布局方式
    CSS——选择器及三大特性
    CSS——常用属性
    Redis——Redis持久化机制、Jedis的使用、Jedis连接池
    Redis——NOSQL、Redis概述、Redis数据类型、通用命令
    JDBC——使用JDBC事务分层完成转账案例
    JDBC——JDBC中的事务、DBUtils使用事务
    Dao组件
    集合的介绍(完全版)
  • 原文地址:https://www.cnblogs.com/dongao/p/11538424.html
Copyright © 2011-2022 走看看