关于计算机中补码的问题

计算机中的有符号数有三种表示方法,即原码、反码和补码

三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”;

而数值位,三种表示方法各不相同。

在计算机系统中,数值一律用补码来表示和存储。

原因在于,使用补码,可以将符号位和数值域统一处理,同时,加法和减法也可以统一处理。

接下来,来看一看原码、反码和补码到底是什么,以及它们之间的转换关系。



原码:

是一种计算机中对数字的二进制定点表示方法

原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0 和 -0),其余位表示数值的大小。

现在用4个bit(也就是1个byte)表示数字1:

0 0 0 1 (也就是十进制的1)

因为它是正数,所以它的第一位(也就是它的符号位)是 0,剩下的部分(也就是0 0 1)作为数值进行计算,结果是1。

那么 -1 怎么表示呢?

刚刚说到,第一位为符号位,而负数的符号位是1,那么这里的 -1 就可以写成:

1 0 0 1



反码:

0以及正数的反码就是其本身,也就是说0的反码还是0,一个正数的反码还是这个正数自身。

而负数则不同,负数的反码,除了第一位符号位不变(还是 1 ),其余各位取反,这样就得到了它的反码。

那么 -1 的反码是多少呢?

1 0 0 1【原码】

1 1 1 0 【反码】

解析:001各位取反就是110。



补码:

  • 对负数的原码取反,再加1,这样就得到了它的补码。
  • 也就是说对负数的反码加1,就得到了它的补码。
  • 正数的补码还是其本身。0的补码还是0。

还是以 -1 举例子,它的补码是多少呢?

1 0 0 1【原码】

1 1 1 0【反码】

反码加1之后,1110 + 1 = 1111 也就得到-1的补码:

1 1 1 1【补码】



问:在字长为8位的计算机中,-10的原码、反码、补码分别是多少?

解答:

(1)10的原码为0000 1010,第一位变为1,得到负数-10。

1000 1010【原】

解析:第一位是符号位(-),剩余部分求值:0*2+ 1*2+ 0*2+ 1*2= 0 + 2 + 0 + 8 =  10

(2)取反得到反码:

    1111 0101【反】

    解析:0变1,1变0。

(3)加1得到补码:

    1111 0110【补】

    解析:1111 0101 + 1 = 1111 0110



总结:

补码是计算机系统存储数据的方式,也就是说它的计算实际上都是以补码的方式进行的。

我们所输入的指令是我们看得懂的原码,但是输入计算机时,它会自动解析为补码进行运算。

那么补码的优势在哪里呢?

第一,解决了符号的表示的问题;

第二,可以将减法运算转化为补码的加法运算来实现,克服了原码加减法运算繁杂的弊端,可有效简化运算器的设计;

第三,在计算机中,利用电子器件的特点实现补码和真值、原码之间的相互转换,非常容易;

第四,补码表示统一了符号位和数值位,使得符号位可以和数值位一起直接参与运算,这也为后面设计乘法器、除法器等运算器件提供了极大的方便。

总之,补码概念的引入和当时运算器设计的背景不无关系,从设计者角度,既要考虑表示的数的类型(小数、整数、实数和复数)、数值范围和精确度,又要考虑数据存储和处理所需要的硬件代价。

因此,使用补码来表示机器数并得到广泛的应用,也就不难理解了。

(本文参考资料:https://baike.baidu.com/item/%E8%A1%A5%E7%A0%81/6854613?fr=aladdin

原文地址:https://www.cnblogs.com/buildnewhomeland/p/12127321.html

时间: 2024-10-08 05:22:31

关于计算机中补码的问题的相关文章

计算机中的原码,反码,补码与移码

在计算机内,定点数有3种表示法:原码.反码和补码. 原码:就是二进制定点表示法,即最高位为符号位,0表示正,1表示负,其余位表示数值的大小 反码:正数的反码与其原码相同:负数的反码是对其原码逐位取反,但符号位除外.       原码10010=反码11101(10010,1为符号位,故为负) 补码:正数的补码与原码相同,负数的补码是对其原码逐位取反,但符号位除外,然后整个数加1 如果补码的符号位为0,则表示一个正数,其原码就是补码如果补码的符号位为1,则表示一个负数 移码:移码与补码的关系: [

原码、反码、补码,计算机中负数的表示

原码:将一个整数,转换成二进制,就是其原码.                如单字节的5的原码为:0000 0101:-5的原码为1000 0101. 反码:正数的反码就是其原码:负数的反码是将原码中,除符号位以外,每一位取反.                如单字节的5的反码为:0000 0101:-5的反码为1111 1010. 补码:正数的补码就是其原码:负数的反码+1就是补码.                如单字节的5的补码为:0000 0101:-5的原码为1111 1011. 在计

计算机中的整数(原码、反码、补码)

系统中所有的信息——包括磁盘文件.存储器中的程序存储器中存放的用户数据以及网上落上传送的数据,都是由一串位表示的.区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文.比如,在不同的上下文中,一个同样的字节序列可能表示一个整数.浮点数.字符串或者机器指令. 计算机中的整数可以分为无符号整数和有符号整数两种类型.无符号整数不存在正负之分,在计算机中以其二进制真值的形式存放.而有符号整数由于有正负数的区分,表示相对复杂. 计算机中的符号数有三种表示方法,即原码.反码和补码.三种表示方法均有符号

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

看到这个标题,很多人有话要说了,切!这个东西每一本计算机基础知识的书中都有介绍的,你还拿出来Show什么嘛!我的原则是你需要就来看一看,懂就不要去理会,倒也不必讽刺两句,我相信总有需要它的人.当初我看书是没看明白的,在网上查了好多资料才有所悟. 前几天跟老婆讲原码.反码和补码的知识,老婆似懂非懂,在这里我发表一下我个人的意见,浅显的把我所理解的原码.反码和补码的知识总结一下,一来可以给不懂的人来点启示,二来也可以方便老婆以后记忆复习.理解有不对的地方希望大家予以指出,谢谢! 大家都知道数据在计算

关于计算机中的《补码》,公式:-n=~n+1 引伸:~n=-n-1

在计算机系统中,数值一律用补码来表示(存储).主要原因是使用补码可以将符号位和其他位统一处理:同时,减法也可以按加法来处理.另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃.补码跟源码的转换过程几乎是相同的. 补码概述 求给定数值的补码表示分以下两种情况: ⑴正数的补码 与 原码 相同. [例1]+9的补码是00001001.(备注:这个+9的补码说的是用8位的2进制来表示补码的,补码表示方式很多,还有16位2进制补码表示形式,以及32位2进制补码表示形式等.) ⑵负数的

计算机中数字的二进制存储形式

今天,做个关于二进制的算法题,突然有个问题一直想不通为什么~5是6,计算机基础知识不过关啊,所以现在来弥补下,正数和负数在计算机中是怎么存储和计算的. 讲讲计算机中的存储形式: 计算机中存储的数都是以补码的方式存储的,而正数的原码,反码,补码都是一样的.但是负数的原码,反码,补码是不一样的. 下面都是以java中的int i=5为例. 正数5的原码就是其二进制码:00000000 00000000 00000000 00000101 反码是:00000000 00000000 00000000

负数在计算机中的表示 Byte-128

http://blog.csdn.net/njuitjf/article/details/4585247 今天,老大让我调查一个浮点数转换为整数的问题.自己就查了些资料,顺便复习一下原码.反码和补码. 原码:将一个整数,转换成二进制,就是其原码.如单字节的5的原码为:0000 0101:-5的原码为1000 0101. 反码:正数的反码就是其原码:负数的反码是将原码中,除符号位以外,每一位取反.如单字节的5的反码为:0000 0101:-5的原码为1111 1010. 补码:正数的补码就是其原码

JAVA中数值在计算机中的表示方式

很多刚学习JAVA的童鞋不明白为什么int型有时候强转为byte时会变为负数. 这是因为不明白JAVA中数值的表示机制. JAVA中规定用二进制补码的方式表示一个负数. 有了上面的概念之后我们就知道为什么高精度转换低精度类型时有时会变成负数. 比如 int 232转为byte时值 变为 -24 转换过程如下: 232在计算机中存储如下: 00000000 00000000 00000000 11101000 转为byte后舍去高位存储如下: 11101000 这个值最高位为1:因此他是一个负数,

小数在计算机中为什么会有误差?说明机器数、码制、浮点数、以及数制转换的一些问题

1.常用的数制 十进制  0~9 八进制 0~7 二进制 0~1 十六进制 0~F 2.十进制 转 各个进制 方法 : 除以基数取余反向 3. 2进制  8进制  16进制 转十进制 二进制 ___________________________ 2^3     2^2    2^1     2^0 1         0          0         1         X =8+ 1 = 9 八进制 ———————————-------------- 8^1    8^0 1