计算机进制、原码、反码、补码相关知识
一:计算机中的数制
二:数制之间的转换
三:无符号数、有符号数
四:二进制原码、反码、补码、移码(增码)
4.1 原码
1、原码的定义
2、原码的特点
(1)原码的数值部分是该数的绝对值,最高位表示符号位,最高位为0是正数,最高位为1是负数。
(2)表示范围:[-127,+127]
(3)0有两种表示法:[+0]原 = 0 000 0000 , [-0]原 = 1 000 0000
3、原码的表示规则
例如:数字 6 在计算机中原码表示为:0 000 0110
其中,第一个数字0是符号位,0表示正数,0000110是数字 6 的二进制数据表示。
数字 -6 在计算机中原码表示为:1 000 0110
以上是在8位计算机中的原码表示,如果在32位或16位计算机中,表示方法也是一样的,只是多了几个数字0而已。
例如:
在32位计算机中数字 6 的原码表示为:0 000 0000 0000 0000 0000 0000 0000 0110
在16位计算机中数字 6 的原码表示为:0 000 0000 0000 0110
4、原码的运算
4.2 反码
反码表示规则为:如果是正数,则表示方法和原码一样;如果是负数,符号位不变,其余各位取反,则得到这个数字的反码表示形式。
例如,数字 6 在8位计算机中的反码就是它的原码:0 000 0110
数字-6 在8位计算机中的反码为:1 111 1001
4.3 补码
1、补码的概念
2、补码的特点
(1)补码中0值唯一 【0 000 0000】
(2)补码表示的负数范围可以到2n ,[-128,+127]
(3)补码没有符号位(习惯上认为补码最高位为符号位)
3、补码的运算
所有的的减法都可以转换成加法,也就是加一个负数的形式
4、补码的表示规则
补码是计算机表示数据的一般方式,其规则为:如果是正数,则表示方法和原码一样;如果是负数,则将数字的反码加上1(相当于将原码数值位取反然后在最低位加1)。
例如:数字 6 在8位计算机中的补码就是它的原码:0 000 0110
数字-6 在8位计算机中的补码为:1 111 1010
4.4 移码(增码)
五:引入原码、反码、补码的缘由
首先我们都知道,我们日常生活中使用的都是十进制数的运算,但是在计算机中采用的是二进制。如果想让计算机计算诸如 2 + 3 之类的结果,就要想办法用二进制来表示 2 和 3。但是这个看起来很简单的事情做起来却是一波三折。
方案一:直接表示法
例如:直接将十进制数转换成二进制数。
但是稍加思索就会发现这样做有个问题。
负数怎么表示呢,因为计算机内只有0和1,正负号也只能用0和1来表示。
改进!!
方案二:原码表示法
用0代表 + 号,1代表 - 号
接下来验证一下这个方法是否可行:
很显然经过验证,这种方法是行不通的。
那么计算机中到底是怎么来表示十进制数的呢?我们再来看下一个方案
方案三:补码
那么方案可行,大部分的计算机中就是采用补码来表示数字的。
而且,采用补码的形式,所有的的减法都可以转换成加法,也就是加一个负数的形式。那么在设计CPU硬件电路时,只需要设计加法器电路就可以了。事实上,计算机中确实也只有加法器,而没有减法器。
扩展一下:一个字节所能表示的数据范围?
很显然就是8位补码的表示范围:[-128,+127]