计组总结2-原码、补码和反码
2018-03-28 08:41
330 查看
机器数
计算机中表示的带符号的二进制数成为“机器数”,机器数有3种表示方法:原码,补码和反码。
在刚刚接触这三种表示方法时我们可能只是简单的记所谓的口诀(比如说,原码转反码:符号位不变,其他位取反),但是并不知道其中的原理。下面总结以下原码、补码和反码的相关知识
原码是最接近真值的一种表示形式,这使得原码的计算和我们熟知的十进制运算非常相似,只要运算的结果不产生溢出,原码与原码的运算仍为原码。
但是由于运算需要考虑符号位,符号位和数值位需要分开运算,在机器中进行运算比较复杂,他的便于理解性也成为其最大的缺点。
原码定义:
整数部分
![](https://img-blog.csdn.net/20180328084304176?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x5bl8wMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
小数部分
![](https://img-blog.csdn.net/20180328084322557?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x5bl8wMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
即:[X]原 = 符号位 + |X|
例:
X = +111.1011 —–> [X]原 = 0,111.1011 (符号位与数值位之间用,隔开)
X = - 101.0101 —–> [X]原 = 1,101.0101
原码0的表示
[X]原 = 0,000.0000 = + 0
[X]原 = 1,000.0000 = - 0
原码0的表示方法有两种
机器数的最高位为符号位,0表示正数,1表示负数。
补码定义:
整数部分
![](https://img-blog.csdn.net/20180328084357508?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x5bl8wMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
小数部分
![](https://img-blog.csdn.net/20180328084412101?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x5bl8wMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
即:[X]补 =( 2 * 符号位 + X ) mod 2^n
自认为最简单的理解是,与原码表示方法不同,补码符号位所表示的位带权值,如果符号位为1,则带负权。
例如:[X]补 = 1111 = -2^3 + 2^2 + 2^1 + 2^0 = -1
补码0的表示
[X]补 = 0,000.000 = + 0 = - 0
补码0的表示方法只有一种
补码的运算
当补码加法运算(减法运算实为加法运算+[-Y]补)的结果不超出机器范围时,可以得出以下重要结论
用补码表示的两数进行加法运算,其结果仍为补码
[X+Y]补 = [X]补 + [Y]补
符号位与数值位一样参与运算
反码定义
整数部分
![](https://img-blog.csdn.net/20180328084433977?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x5bl8wMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
小数部分
![](https://img-blog.csdn.net/20180328084449201?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x5bl8wMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
即:[X]反 = (2^n - 1)* 符号位 + X mod (2^n -1)
反码0的表示
[X]反 = 0,000.0000 = + 0
[X]反 = 1,111.1111 = - 0
反码的运算
补码运算在最高位有进位时,要在最低位+1,要多进行一次加法运算,既增加了复杂性,又影响了速度,故很少在计算机中使用。
在知晓了原码、补码和反码的定义之后,我们可以来验证之前口诀的正确性,并进行推导。
原码—–>反码 : 符号位不变,数值位取反
原码—–>补码 : 符号位不变,数值位取反加1
计算机中表示的带符号的二进制数成为“机器数”,机器数有3种表示方法:原码,补码和反码。
在刚刚接触这三种表示方法时我们可能只是简单的记所谓的口诀(比如说,原码转反码:符号位不变,其他位取反),但是并不知道其中的原理。下面总结以下原码、补码和反码的相关知识
原码表示法
机器数的最高位为符号位,0表示正数,1表示负数。原码是最接近真值的一种表示形式,这使得原码的计算和我们熟知的十进制运算非常相似,只要运算的结果不产生溢出,原码与原码的运算仍为原码。
但是由于运算需要考虑符号位,符号位和数值位需要分开运算,在机器中进行运算比较复杂,他的便于理解性也成为其最大的缺点。
原码定义:
整数部分
小数部分
即:[X]原 = 符号位 + |X|
例:
X = +111.1011 —–> [X]原 = 0,111.1011 (符号位与数值位之间用,隔开)
X = - 101.0101 —–> [X]原 = 1,101.0101
原码0的表示
[X]原 = 0,000.0000 = + 0
[X]原 = 1,000.0000 = - 0
原码0的表示方法有两种
补码表示法
上面提到原码运算在机器中实现起来比较复杂,然而利用补码运算则可避免其缺点。机器数的最高位为符号位,0表示正数,1表示负数。
补码定义:
整数部分
小数部分
即:[X]补 =( 2 * 符号位 + X ) mod 2^n
自认为最简单的理解是,与原码表示方法不同,补码符号位所表示的位带权值,如果符号位为1,则带负权。
例如:[X]补 = 1111 = -2^3 + 2^2 + 2^1 + 2^0 = -1
补码0的表示
[X]补 = 0,000.000 = + 0 = - 0
补码0的表示方法只有一种
补码的运算
当补码加法运算(减法运算实为加法运算+[-Y]补)的结果不超出机器范围时,可以得出以下重要结论
用补码表示的两数进行加法运算,其结果仍为补码
[X+Y]补 = [X]补 + [Y]补
符号位与数值位一样参与运算
反码表示法
机器数的最高位为符号位,0表示正数,1表示负数。反码定义
整数部分
小数部分
即:[X]反 = (2^n - 1)* 符号位 + X mod (2^n -1)
反码0的表示
[X]反 = 0,000.0000 = + 0
[X]反 = 1,111.1111 = - 0
反码的运算
补码运算在最高位有进位时,要在最低位+1,要多进行一次加法运算,既增加了复杂性,又影响了速度,故很少在计算机中使用。
总结
理解二进制的表示方法至关重要。在知晓了原码、补码和反码的定义之后,我们可以来验证之前口诀的正确性,并进行推导。
原码—–>反码 : 符号位不变,数值位取反
原码—–>补码 : 符号位不变,数值位取反加1
相关文章推荐
- 原码、反码、补码总结
- 关于计算机中的原码、反码、补码问题总结
- 原码,补码和反码总结
- java原码、补码、反码总结
- 原码,反码,补码的表示范围总结
- 原码、反码、补码的总结
- java 自我知识总结(一) 原码 反码 补码 移码
- 计算器原码、反码和补码和位移的一些总结
- 原码、反码、补码总结
- 计算器原码、反码和补码和位移的一些总结
- 计算器原码、反码和补码和位移的一些总结
- 计算器原码、反码和补码和位移的一些总结
- 总结数值的原码、反码、补码
- 原码 反码 补码 移码的关系(精简总结)
- 计算器原码、反码和补码和位移的一些总结
- 补码,反码,原码的范围总结
- 原码、反码、补码、移码 终极总结
- java学习总结(06,05.16)计算机对数据的储存方式以及原码反码补码的概念
- 【总结】正确理解原码、移码、反码与补码
- 原码、反码、补码总结