二进制数的原码、反码、补码(详解) |
您所在的位置:网站首页 › 正码反码补码偏移码 › 二进制数的原码、反码、补码(详解) |
一、原码、反码、补码产生原因
由于计算机的硬件决定,任何存储于计算机中的数据,其本质都是以二进制码存储。 根据冯·诺依曼提出的经典计算机体系结构框架,一台计算机由运算器、控制器、存储器、输入和输出设备组成。其中运算器只有加法运算器,没有减法运算器(据说一开始是有的,后来由于减法运算器硬件开销太大,被废了)。 所以计算机中没办法直接做减法的,它的减法是通过加法实现的。现实世界中所有的减法也可以当成加法的,减去一个数可以看作加上这个数的相反数,但前提是要先有负数的概念,这就是为什么不得不引入一个符号位。符号位在内存中存放的最左边一位,如果该位位0,则说明该数为正;若为1,则说明该数为负。 而且从硬件的角度上看,只有正数加负数才算减法,正数与正数相加,负数与负数相加,其实都可以通过加法器直接相加。 原码、反码、补码的产生过程就是为了解决计算机做减法和引入符号位的问题。 二、原码原码:是最简单的机器数表示法,用最高位表示符号位,其他位存放该数的二进制的绝对值。 以带符号位的八位二进制数为例:0010,最高位为1表示这是个负数,在右数第2位有个1,即1*2^1=2,所以表示十进制数-2。 一部分带符号的四位二进制数原码 数值二进制原码数值二进制原码10001-1100120010-2101030011-3101140100-4110050101-511016 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 |