二进制数的原码、反码、补码(详解)

您所在的位置:网站首页 正码反码补码偏移码 二进制数的原码、反码、补码(详解)

二进制数的原码、反码、补码(详解)

2024-06-25 11:40| 来源: 网络整理| 查看: 265

一、原码、反码、补码产生原因

由于计算机的硬件决定,任何存储于计算机中的数据,其本质都是以二进制码存储。

根据冯·诺依曼提出的经典计算机体系结构框架,一台计算机由运算器、控制器、存储器、输入和输出设备组成。其中运算器只有加法运算器,没有减法运算器(据说一开始是有的,后来由于减法运算器硬件开销太大,被废了)。

所以计算机中没办法直接做减法的,它的减法是通过加法实现的。现实世界中所有的减法也可以当成加法的,减去一个数可以看作加上这个数的相反数,但前提是要先有负数的概念,这就是为什么不得不引入一个符号位。符号位在内存中存放的最左边一位,如果该位位0,则说明该数为正;若为1,则说明该数为负。

而且从硬件的角度上看,只有正数加负数才算减法,正数与正数相加,负数与负数相加,其实都可以通过加法器直接相加。

原码、反码、补码的产生过程就是为了解决计算机做减法和引入符号位的问题。

二、原码

原码:是最简单的机器数表示法,用最高位表示符号位,其他位存放该数的二进制的绝对值。

以带符号位的八位二进制数为例:0010,最高位为1表示这是个负数,在右数第2位有个1,即1*2^1=2,所以表示十进制数-2。

一部分带符号的四位二进制数原码 数值二进制原码数值二进制原码10001-1100120010-2101030011-3101140100-4110050101-51101

6

0110-61110 二、反码

原码最大的问题在于一个数加上它的负数不等于0,于是反码的设计思想就是为了解决这个问题。

既然一个负数时一个正数的相反数,干脆把一个正数的二进制按位取反来表示它的负数。

反码:正数的反码和原码一致;负数的反码就是它的原码除符号位外,按位取反。

部分正负数的二进制反码 正数正数的原码(反码相同)负数负数的原码负数的反码10001-11001111020010-21010110130011-31011110040100-41100101150101-51101101060110-611101001 三、补码

补码:正数的原码、反码、补码都一致;负数的补码等于反码+1。

负数的补码等于反码+1只是补码的求法,而不是补码的定义。如果有兴趣可以看到《计算机组成原理》,它会用”模“和”同余“的概念,严格的解释补码。

部分正负数的二进制补码 正数正数的原码、反码、补码负数负数的原码负数的反码负数的补码10001-110011110111120010-210101101111030011-310111100110140100-411001011110050101-511011010101160110-6111010011010 四、举个例子

求~6的值(取反)。

6是正数,原码、反码、补码一致,所以6的补码是0000 0110(我们模拟八位的二进制)。将补码0000 0110进行”~“计算(按位取反),得到补码1111 1001。再讲补码1111 1001转换为原码,先减1拿到反码,1111 1000,再取反(符号位不变)得到原码1000 0111。将原码1000 0111转换成十进制,得到-7。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3