首页 > 其他分享 >原码反码补码

原码反码补码

时间:2023-07-13 16:46:20浏览次数:32  
标签:0000 补码 1111 反码 原码 1000

原码

  • 为什么要用原码?
    计算机的存储是以二进制为基础的,因此正负号难以表示,所以,在二进制表示的基础上,选取最高位作为符号位;
  • 原码带来了什么问题?
      1. 出现了+0(0000 0000)-0(1000 0000),明显不符合常理
      2. 关于负数和正数的计算是完全错误的,例如:
        -3(1000 0011)+ 1(0000 0001) = -4(1000 0100) 

  很明显,问题出在计算时符号位是无法被正确体现的,严格来说,遇到减法时,都会出现这种问题,减法被表现成了加法。

反码

  • 为什么要用反码?
    一定程度上解决了正数与负数的运算问题。
    如何解决的?
    在原码的基础上
    1. 正数保持不变;
    2. 负数的符号位不变,但其他的位按位取反。(1000 0001变为1111 1110
      原理可以用钟表的一圈来解释:我们知道按上面的构造方法,在负数情况下,原码加上补码一定会得到1111 1111(此处仅以8位举例),抛开符号位,仅讨论其他位的数值大小,我们会发现,如果补码加上1,为了维持原补相加的固定值,那么原码就会减去一个1。因此通过补码的加法操作,我们实现了原码的减法。
  • 补码带来了什么问题?
      1. +0(0000 0000)-0(1000 0000)的问题依然没有解决,带来了跨越零点的问题:
        -3(1000 0011)+ 4(0000 0100) 
        -3转为反码:1111 1100 
        相加得到:  0000 0000 

原因:因为存在+0与-0,所以跨越0点时,一定会比原来的值小1.

补码

  • 为什么要用补码?
    解决了+0与-0的问题。
    如何解决的?
    在反码的基础上
    正数不变,负数再加一,因此-0(1000 0000)取反加1得到+0(0000 0000),实现了统一。
    最后出现的细节,为什么大多数的有符号数据类型负数范围比正数范围多1?
    以8位举例1111 1111的补码为1000 00011000 0000对应的原码和补码其实都不存在,但计算机是以补码进行存储的,因此,-128是合法的。

标签:0000,补码,1111,反码,原码,1000
From: https://www.cnblogs.com/KAVEI/p/17551365.html

相关文章

  • Verilog - 补码
    参考《计算机组成与设计第五版》1.二进制补码计算以64bit二进制补码为例。计算方法是:符号位乘以-2^63,然后其余位分别乘以他们各自基值的正值。如下图所示:对二进制补码求相反数将每bit数据从0转为1或从1转为0,然后对结果加1.正数二进制补码左边实际上是无限个......
  • [ARM汇编]计算机原理与数制基础—1.1.3 二进制补码
    在计算机中,为了表示有符号整数(即正数和负数),通常采用二进制补码表示法。二进制补码不仅可以表示负数,还能简化计算机的加法和减法运算。接下来,我们将介绍二进制补码的概念及其计算方法。原码、反码和补码在讨论补码之前,我们先了解一下原码和反码的概念。原码:直接将一个有符号整......
  • 二进制下的补码、反码、原码——适用于有符号整数
    简单定义简单起见,我们这里只考虑三位二进制数所能表示的范围,即${-4,-3,-2,-1,0,\1,\2,\3}$。机器数和真值一个数在计算机中的二进制表现形式,就是这个数的机器数(相当于数的原码)。例如,$-3$的机器数即为$111$,$2$的机器数为$010$。机器数在考虑最高位为符号位的情况下......
  • 原码,补码,反码
    在计算机系统中,数值都是用补码来存储的。主要原因是:使用补码,可以将符号位和其它位统一处理,同时,减法也可以按照加法来处理,如果最高位有进位,则进位被舍弃。以一个字节为例正数的补码和反码都跟原码是相同的。对于负数则不同,负数的反码是将原码除符号位以外的各位取反,而负数的补码则是......
  • 计算机基础中什么是原码,反码,补码和移码?各自有什么用途?
    在计算机基础中,原码、反码、补码和移码是用于表示和处理有符号整数的编码方式。它们各自具有不同的定义和用途。在本文中,我将详细解释每种编码方式,并提供实际例子以加深理解。原码(Sign-MagnitudeRepresentation):原码是最简单的整数表示方法,直接使用二进制表示数值,并用最高位表......
  • 原码和补码
    原码和补码1.原码原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值[+1]原=00000001[-1]原=10000001第一位是符号位.因为第一位是符号位,所以8位二进制数的取值范围就是:[11111111,01111111],即[-127,127]2.补码补码的表示方法是:正数的补码......
  • java基础-原码、反码、补码
    原码:十进制数据的二进制表现形式,最左边是符号位,0为正,1为负。例如,56,它的原码是00111000反码:正数的补码反码是其本身,负数的反码在原码的基础上,符号位不变,数值取反,0变1,1变0。补码:正数的补码反码是其本身,负数的补码是在其反码的基础上+1。计算机中的存储和计算都是以补码的形式进......
  • Java原码、反码、补码
    二进制的最高位是符号位:0表示正数,1表示负数(0->01->-)正数的原码、反码、补码都是一样(三码合一)负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)负数的补码=它的反码+1,负数的反码=负数的补码-10的反码、补码都是0java没有无符号数,换言之,java中的数都是有符号的在......
  • 原码、反码和补码
    1、机器数和真值一个数在计算机中的二进制表示形式,叫做这个数的机器数,而这个数即为该机器数的真值。机器数是有符号的,最高位为0表示正数,为1表示负数。2、原码最高位为符号位,0表示正数,1表示负数。其余位为真值的绝对值。一个字节的空间通过原码可以表达[-127,127],分别为1111......
  • C语言中的位运算符和源码反码补码的浅解
    位运算符【与(&);或(|);非(~);异或(^);移位运算符(<<和>>)】对于有符号(正负)的而言:1)二进制的最高位是符号位:0表示正数,1表示负数2)正数的原码,反码,补码都一样3)负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)4)负数的补码=它的反码+1 5) 0在计算机种分+0与-0,它们的原码,补码,反码......