`

关于反码

 
阅读更多
只有有符号的整数才有原码、反码和补码的!其他的类型一概没有。虽然我们也可以用二进制中最小的数去对应最小的负数,最大的也相对应,但是那样不科学,下面来说说科学的方法。还是说一个字节的整数,不过这次是有符号的啦,1个字节它不管怎么样还是只能表示256个数,因为有符号所以我们就把它表示成范围:-128-127。它在计算机中是怎么储存的呢?可以这样理解,用最高位表示符号位,如果是0表示正数,如果是1表示负数,剩下的7位用来储存数的绝对值的话,能表示27个数的绝对值,再考虑正负两种情况,27*2还是256个数。首先定义0在计算机中储存为00000000,对于正数我们依然可以像无符号数那样换算,从00000001到01111111依次表示1到127。那么这些数对应的二进制码就是这些数的原码。到这里很多人就会想,那负数是不是从10000001到11111111依次表示-1到-127,那你发现没有,如果这样的话那么一共就只有255个数了,因为10000000的情况没有考虑在内。实际上,10000000在计算机中表示最小的负整数,就是这里的-128,而且实际上并不是从10000001到11111111依次表示-1到-127,而是刚好相反的,从10000001到11111111依次表示-127到-1。负整数在计算机中是以补码形式储存的,补码是怎么样表示的呢,这里还要引入另一个概念——反码,所谓反码就是把负数的原码(负数的原码和和它的绝对值所对应的原码相同,简单的说就是绝对值相同的数原码相同)各个位按位取反,是1就换成0,是0就换成1,如-1的原码是00000001,和1的原码相同,那么-1的反码就是11111110,而补码就是在反码的基础上加1,即-1的补码是11111110+1=11111111,因此我们可以算出-1在计算机中是按11111111储存的。总结一下,计算机储存有符号的整数时,是用该整数的补码进行储存的,0的原码、补码都是0,正数的原码、补码可以特殊理解为相同,负数的补码是它的反码加1。下面再多举几个例子,来帮助大家理解!

十进制 → 二进制  (怎么算?要是不知道看计算机基础的书去)
47   → 101111

有符号的整数    原码    反码    补码
  47      00101111  00101111  00101111(正数补码和原码、反码相同,不能从字面理解)
 -47      10101111  11010000  11010001(负数补码是在反码上加1)
“反码和补码技术是怎样被提出的?   ”

====================1.预备知识。==================
注意:此处的 '== '是相等的意思。 '= '是赋值的意思。
在机器世界里:
正数的最高位是符号位0,负数的最高位是符号位1。
对于正数:反码==补码==原码。
对于负数:反码==除符号位以外的各位取反。
       补码==反码+1.
       原码==补码-1后的反码==补码的反码+1。(读完本文后,应该能够直观地认识到本式的正确性)

可以轻易发现如下规律:
自然计算 :a-b==c.
计算机计算:a-b==a+b的补码==d.
c的补码是d.
通过此法,可以把减法运算转换为加法运算。

所以补码的设计目的是:
1.使符号位能与有效值部分一起参加运算,从而简化运算规则.
2.减运算转换为加运算,进一步简化计算机中运算器的线路设计.

=====================2.灵感由来。=================

概念定义:
还记得初中数学里的“补角”的概念吧。
两数之和等于100时,这两个数叫做互为“补数”,100称做“和数”。
如果B+C==100,则
A-B==A-(100-C)==A+C-100.
可以肯定:A-B=A+B的补数-和数。

把这个方法引入机器世界:
设int是8位整数(最高位是符号位),和数H是9位:1   0000   0000.
a,b是任意两int.
显然,a+a的补码==H,H溢出那个最高位之后就剩下了int值0.
①.输入a-b,
②.机器将a-b化个装后喂给加法器:(a的补码)+(-b的补码),它等于c.
不要忘了,c是一个补码.
③.输出:c的原码.

赋值A=a,B=b后,比较一下:
a-b==(a的补码)+(-b的补码)==c.//此处的c是补码形式。
A-B==A+B的补数-和数==C.//此处的C是数字,可以认为它就是原码形式。
if(C> =0)   C==c==c的原码;( '== '是相等的意思,并非赋值)
else   C==c的原码;

这个“补码”中的“补”,跟初中学的那个“补”是一个意思。
数学中的概念名称真还不是随便定义的,比如“数理逻辑”,故名思义就是:用“数学语言”来理清“逻辑”。





一:对于正数,原码和反码,补码都是一样的,都是正数本身。
  对于负数,原码是符号位为1,数值部分取X绝对值的二进制。
                            反码是符号位为1,其它位是原码取反。
       补码是符号位为1,其它位是原码取反,未位加1。
       也就是说,负数的补码是其反码未位加1。
        移码就是将符号位取反的补码

二:在计算机中,实际上只有加法运算,减法运算也要转换为加法运算,
  乘法转换为加法运算,除法转换为减法运算。

三:在计算机中,对任意一个带有符号的二进制,都是按其补码的形式进行运算和存储的。
        之所以是以补码方式进行处理,而不按原码和反码方式进行处理,是因为在对带有符号位的
  原码和反码进行运算时,计算机处理起来有问题。(具体原因见理解原码,反码与补码)
      而按补码方式,
  一方面使符号位能与有效值部分一起参加运算,从而简化运算规则.
  另一方面使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计
      

四:补码加、减运算公式
  
  1):补码加法公式
   [X+Y]补 = [X]补 + [Y]补

        2):补码减法公式
            [X-Y]补 =  [X]补-[Y]补 = [X]补 + [-Y]补
           其中:[-Y]补称为负补,求负补的办法是:对补码的每一位(包括符合位)求反,且未位加1.
分享到:
评论

相关推荐

    补码源码反码转换工具,补码反码原码的转换工具,C/C++

    以下是关于这些概念的详细解释: 1. **原码**: 原码是最直接的二进制表示方式,其中最高位(符号位)用于表示数值的正负。对于正数,符号位为0;对于负数,符号位为1。其余位表示数值的绝对值。例如,正数5的原码...

    原码、反码、补码三码转换(C#)

    在计算机科学中,原码、反码和补码是用于表示二进制数值,特别是负数的三种方式。本文将详细讲解这三种编码方式,并通过C#编程语言演示如何进行三码之间的转换。 1. 原码(Direct Code): 原码是最直观的二进制...

    计算机基础知识:原码反码补码练习(含答案)

    原码、反码和补码是二进制表示正负数的关键概念,它们主要用于无符号整数和有符号整数的表示。以下是对这些知识点的详细解释: 1. **原码**:原码是最直观的二进制表示,其中最高位(称为符号位)为0表示正数,为1...

    补码源码反码转换工具.zip

    在计算机科学中,补码、源码和反码是表示有符号整数的三种常见方式。这个名为"补码源码反码转换工具.zip"的压缩包包含了一个使用C++和MFC(Microsoft Foundation Classes)库开发的界面应用程序,旨在帮助用户理解并...

    原码反码补码讲课.pptx

    在对计算机中的整数进行探讨时,我们不得不提及带符号整数的三种不同编码方式:原码、反码以及补码。这些编码方式在计算机内部用于表示正数和负数,并决定了计算机如何处理整数的加减运算。 首先,我们来定义带符号...

    二进制-原码-补码-反码

    ### 二进制-原码-补码-反码 #### 一、基本概念 **二进制**是计算机中最基本的数据表示方式,它只包含两个数字:0 和 1。计算机内部的所有数据处理和存储都是基于二进制来进行的。 在计算机科学中,根据是否携带...

    原码补码及反码的区别

    原码、反码和补码是三种不同的二进制编码方式,主要用于表示有符号整数。理解这些概念对于深入理解计算机硬件和软件操作至关重要。 **原码(Original Code)** 原码是最直观的二进制表示形式,它直接将符号位(最高...

    原码、反码

    ### 原码与反码的概念及转换方法 在计算机科学领域中,为了方便处理正数和负数,特别是为了简化运算逻辑,引入了原码、反码以及补码的概念。其中,原码和反码是理解补码的基础。本文将详细介绍原码与反码的概念及其...

    计算机中的原码、反码和补码

    在深入探讨计算机中表示有符号整数的原码、反码和补码之前,让我们先回顾一下计算机存储数据的基本单位——字节。正如文中所述,一个字节由8位组成,每位可以是0或1,因此一个字节可以表示\(2^8 = 256\)种不同的状态...

    为什么CAN信号传输中要插入反码位

    本文将深入探讨CAN信号传输中插入反码位的概念及其重要性。 首先,我们需要了解CAN协议中的基本概念。在CAN通信中,数据是通过称为帧的结构传输的,这些帧包括仲裁场、控制场、数据场等。在这些部分中,使用了非...

    原码、反码、补码

    ### 原码、反码、补码详解 #### 一、引言 在计算机科学领域,二进制是表达所有数字和字符的基础。我们通常使用的十进制数需要转换成二进制来被计算机处理。但对于负数,其转换过程更加复杂。本文将详细介绍原码、...

    二进制-原码-补码-反码.pdf

    "二进制-原码-补码-反码" 在计算机科学中,二进制数是计算机中最基本的表示形式。为了能够正确地表示和处理有符号数和无符号数,计算机科学家们提出了原码、反码和补码三种表示方法。 原码是指在二进制数的最高位...

    wxh 原码、反码、补码的总结.rar

    在计算机科学中,原码、反码和补码是用于表示二进制数值,特别是负数的三种方式。这些编码方法对于理解计算机内部如何存储和处理数字至关重要。下面是对这三种编码方式的详细解释。 首先,原码是最直观的表示方式,...

    原码反码补码PPT学习教案.pptx

    原码反码补码PPT学习教案 原码反码补码是计算机系统中最基本的概念之一,了解原码反码补码的原理和应用对于计算机科学和技术的学习非常重要。本资源摘要信息将对原码反码补码的概念、特点和应用进行详细的介绍。 ...

    原码,反码,补码详解及原理.docx

    原码、反码和补码是计算机中用来表示有符号整数的重要概念,它们主要用于二进制数的存储和计算,特别是在计算机硬件中简化运算过程。以下是对这些概念的详细解释: 1. **原码**: 原码是最直观的表示方式,直接在...

    IP校验与算法反码求和详解

    【IP校验与算法反码求和详解】 IP校验和是网络通信中确保数据完整性的关键机制,特别是在IP协议中,它通过反码求和校验算法来检测IP包头在传输过程中是否发生错误。这个算法是基于1的补码(one's complement)原理...

    原码 补码 反码 按位运算

    原码、补码和反码是三种常见的二进制表示法,主要用于表示有符号整数,而按位运算则是对二进制数进行操作的基础手段。下面将详细阐述这些概念。 一、原码(正码) 原码是最直观的二进制表示方法,直接反映了数字的...

    整数的原码,反码和补码

    ### 整数的原码、反码和补码详解 在计算机科学中,原码、反码和补码是表示有符号整数的三种主要方式。它们被广泛应用于数据存储和算术运算中,每种编码方式都有其特定的规则和应用场景。 #### 一、原码(Sign and ...

    为什么需要反码和补码?.docx

    特别是在处理整数时,我们需要了解几种不同的编码方式,其中包括原码、反码和补码。这些编码方式主要用于表示正负数值,尤其是在没有专门的减法器的硬件设计中。 首先,机器数是数值在计算机中的二进制表示。它由一...

    JAVA中原码反码补码详细介绍

    详细介绍JAVA中原码,补码,反码的概念,对于初学者有较好的帮助。

Global site tag (gtag.js) - Google Analytics