真值,原码,反码,补码和移码 释义
2013-05-15 20:00
351 查看
简单定义
真值:正数或负数的真值为其绝对值对应的二进制数前面加上正号或负号。
比如: 2的真值为+00000010
-2的真值为-00000010
(其中正号可以省略)
原码:(原码的第一位表示符号位,0表示正,1表示负)
正数的原码为对应的二进制数, 如2的原码为00000010
负数的原码为其绝对值对应的二进制数的第一位变为1,如-2的原码为10000010
反码:
正数的反码与其原码相同
负数的反码是对其原码逐位取反,符号位除外。
补码:
正数的补码与原码相同
负数的补码是在其反码的末位加1
移码:
移码是对补码的符号位取反得到的
以8位二进制数为例:
2 -2
真值 00000010 -00000010
原码 00000010 10000010
反码 00000010 11111101
补码 00000010 11111110
移码 10000010 01111110
为什么要使用原码,反码,补码 ?
原码:日常生活中,我们使用十进制来表示一个数, 如果是负数的话,我们就在数的前面加一个符号( “-”)。
但是在计算机中,只能识别0 和 1。(类似脉冲的变化.....).
这样的话,就需要使用二进制的方式来表示数。
对于负号的识别方面,用一个二进制数的最高为存放符号(0为正, 1为负), 这样就产生了机器数的原码了。
反码:
在使用原码进行计算时, 比如:
十进制 (1) 10 - (1)10 = (1)10 + (-1)10 = (0)10
二进制 (0 0000001)原 + (1 0000001)原 = (1 0000010)原 = ( -2 )
很显然,这个结果是错误的。这样得到一个结论,涉及到负数的加法时,使用原码进行加减是有问题的。
于是乎, 尝试使用反码进行运算:
(0 0000001)反 + (1 1111110)反 = (1 1111111)反 = (1 0000000)原 = ( -0 )
看上去接近了, 但还是有问题,结果应该是(+0)
(+0)和(-0)上,在人们的计算概念中零是没有正负之分的。于是就引入了补码的概念
补码
负数的补码就是对反码加一,而正数的补码不变,正数的原码反码补码是一样的。在补码中用(-128)代替了(-0),这个是人为规定的,所以补码的表示范围为:
(-128~0~127)共256个。
(0 0000001)补 + (1 1111111)补 = (0 0000000)补 = ( 0 )
这下正确了。
所以补码的设计目的是:
⑴ 使符号位能与有效值部分一起参加运算,从而简化运算规则。补码机器数中的符号位,并不是强加上去的,是数据本身的自然组成部分,可以正常地参与运算。
⑵ 使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。
所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、c等其他高级语言中使用的都是原码。
相关文章推荐
- 真值,原码,反码,补码和移码 释义
- 真值 原码 反码 补码 移码
- 原码、反码、补码、移码、真值(及(8C5A3E00)16计算)
- 真值 原码 反码 补码 移码
- 计算机组成原理---如何将真值转成补码,原码,移码,反码。
- 原码反码补码移码
- 原码、反码、补码,移码表示法
- 原码、反码、补码及移码的作用与区别
- 一张图看懂原码、反码、补码、移码
- 原码、反码、补码和移码的简单介绍
- 原码、反码、补码和移码
- 原码、反码、补码和移码
- 知识点-原码补码反码移码
- 原码 反码 补码 移码
- Java 中的真值、机器数、原码、反码和补码:为什么整形的取值范围 不是对称的,比如 byte的取值范围为 -128到127,而不是-128到128或者-127到127?
- 原码、反码、补码与移码
- 原码,反码,补码,移码
- 补码反码原码、反码、补码及移码的作用与区别
- 原码、反码、补码及移码的作用与区别
- 自己实现的原码、反码、补码、移码的表示与加减运算软件