软考:原码、反码、补码、移码

为了便于运算,带符号的机器数采用原码、反码和补码等不同编码方法。


原码:最高位为符号位,0表示正号,1表示负号,其余位表示数值绝对值。比如:+1
是0 000 0001;-1
是1000 0001
。0原码有两种表示形式:+0:00000000;-0:1
0000000。

但是直接使用原码在计算时会有麻烦,比如(1)+(-1)=0,直接使用原码(0
0000001)+(1000
0001)=(10000010),结果为-2,也就是使用原码直接参与计算可能会出现错误的结果。所以原码的符号位不能直接参与运算,必须与其他为分开,这样会增加硬件的开销和复杂性。


反码:同原码一样,最高位为符号位,0表示正号,1表示负号,正数反码与原码同,负数反码是其绝对值取反。比如1和-1的反码:+1
是0 000 0001;-1
是1111 1110,0原码有两种表示形式:+0:0
0000000;-0:1 1111111,同样对于上面运算,使用反码结果为负0:(0
000 0001)+(1111
1110)=(11111111),而0是不分正负的,反码的符号位可以直接参与运算,而且减法也可以直接转换为加法。

补码:最高位为符号位,0表示正号,1表示负号,正数补码与原码、反码同,负数补码为其反码末尾加1。1和-1的补码:+1
是0 000 0001;-1
是1111 1111,0有唯一的编码:+0:0
0000000;-0:0 0000000。采用补码做上面的加法计算:(0
000 0001)+(1111
1111)=(00000000).

由于补码能使符号位和有效位一起参加运算,从而简化运算规则,同时也使减法运算转换为加法运算,进一步简化计算机中运算器的电路,大部分计算机系统中都使用补码表示。

  
移码:只要将补码的符号位按位取反获得相应移码表示。1和-1的移码:+1
是1 000 0001;-1
是0111 1111。0有唯一的编码:
+0:10000000;-0:1 0000000。

 
总结:

1、码制规则:正数的原码、反码、补码都相同;负数的反码(除符号位按位取反)、补码(反码+1),移码都是符号位按位取反。

2、作用:

反码:解决负数加法运算问题,将减法运算转换为加法运算,从而简化运算规则;

补码:解决负数加法运算正负零问题,弥补了反码的不足。

移码:常用来比较大小,一般会把浮点数的阶码用移码表示,把数值用移码表示出来可以一眼看出他们的大小。这样很容易判断阶码的大小,移码可用于简化浮点数的乘除法运算。

时间: 2024-08-26 08:34:54

软考:原码、反码、补码、移码的相关文章

原码-反码-补码-移码

数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为 127~(-127) 原码-反码-补码-移码 原码 :二进制(开头第一个表示符号0正1负) 反码 :在原码的基础上,符号位不动,其他位取反 补码 :在反码的基础上,运算+1 移码 :在补码的基础上,符号位取反 101011(二进制)--> 原码 00101011 --> 反码 01010100 --> 补码 01010101--&

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

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

计算机基础知识_原码反码补码

一.原码,反码,补码 1.原码 比如一个二进制数字 最高位是0,(0代表正数) 0010 1000 那么原码就是0010 1000 反码: 0010 1000 补码: 0010 1000 都是一样的,这个二进制数字的10进制是40 所以是正数 正数的原反补都是一样的 2.反码 反码就是原码的取反,二进制的 0变为1 1变为0 ,看最高符号位是0 还是1,如果是1,则你要0变为1,1变为0, 3.补码: 负数的的是原码 取反 在加1 变成补码(二进制数) 正数的原码 加上负数的补码就等于是做减法运

java基础:原码反码补码

计算机在操作的时候,都是采用数据对应二进制的补码来计算的: 原码 反码 补码 原码:用原码,反码,补码来分别表示+7,和-7. 首先得到7的二进制:111

原码, 反码, 补码 详解

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计

[转]原码, 反码, 补码 详解 很全

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计

关于原码, 反码, 补码的复习

原本大一时考试90+的组成原理,隔了太长时间没使用,概念也慢慢模糊了,由于最近考试的基础知识有可能用到,于是,在网上找些资料,整理成这个文章,方便以后某天回来看看,好记性真不如烂笔头. 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011.如

原码 反码 补码 以及 为什么要使用原码反码补码

原始博文网址,无意侵权,只是想记下来以后复习的时候方便, http://www.cnblogs.com/cumtchw/p/4523332.html http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html 机器数 一个数在计算机中的二进制表示形式,叫做这个数的机器数,机器数是带符号的,在计算机中用一个数的最高位存放符号,正数为0,负数为1,比如,十进制中的+3,假设计算机字长为8位,转换成二进制就是0000 0

[C++基础]原码/反码/补码、二进制位运算

原码/反码/补码 编码 定义 实例 原码 最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小. [+100]原=01100100 [+0]原=00000000 [-100]原=11100100 [-0]原=10000000注意:在原码中,零有两种表示形式. 反码 正数的反码与其原码相同:负数的反码是对其原码逐位取反,但符号位除外. [+100]反=01100100 [+0]反=00000000 [-100]反=10011011[-0]反=1111111

详解 原码, 反码, 补码

本篇文章讲解了计算机的原码, 反码和补码. 并且深入探求了为何要使用反码和补码, 以及更进一步论证了为何可以用反码和补码的加法计算原码的减法. 论证部分如有错误请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机中用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位