原码、反码、补码与移码
2018-03-20 17:57
1061 查看
这篇博客本来是打算上周五就写的,结果上周五又有其他安排,就在今天写了。
大家都知道,在计算机中都是以0和1来传递信息的,所以我们将各种数值在计算机中表示的形式称为机器数,特点就是采用二进制计数制。那么为了便于计算,机器数又可以采用原码、反码、补码与移码等不同的编码方法,而这种编码方法称为码制。
这篇文章,就尝试将这种码制解释一下。在开始之前,首先达成一个共识,在表示方法中,最高位是符号位,0表示正号,1表示负号。如果机器字长为n,则表示用n个二进制位表示数据。是不是有点儿绕?说白了就是规定机器字长为n,那就是n个数字。在这里,n取为8。好了,接下来进入正题
1,原码:
在原码中,除了最高位是符号位之外,其余都表示数值的绝对值。举个栗子:1的原码为0 0000001,-1的原码为1 0000001(最高位也就是第一个数字,是符号位)
在这里,如果对1+(-1)进行运算,那么应该为0。但是如果以原码进行计算,我们发现结果为1 0000010,转换为十进制则为-2。与实际相比,误差较大。所以还需要别的编码规则,比如反码。
2,反码:
对于正数来说,反码与原码是相同的。
但是对于负数来说,反码与原码,除了最高位不变之外,其余位取反(毕竟是反码反码,怎么体现呢?就是通过其余位取反来体现的)。比较难以理解对吧,咱们拿-1来举例,-1的原码为1 0000001,那么-1的反码就是1 1111110。这样是不是就好容易理解一些~
同样,如果将1的反码与-1的反码进行运算,我们发现结果为1 1111111,将反码弄为原码为0 0000000,也就是十进制中的0,是不是误差较原码相比,就小一些。
3,补码:
正数的补码与原码相同。
对于负数来说,补码就是在反码基础上,末尾加1。同样举个例子,通过上面我们知道,-1的反码为1 1111110,那么在末尾加1之后,则变为1 1111111,那么8个1就是-1的补码。
同样,如果将1的补码与-1的补码进行运算,结果为0 0000000。结果直接就为0,不像反码那样,还需要再转换一下。
基于此,补码是应用较为广泛的。
4,移码:
对于移码,我感觉我的理解也是有些偏差。先写在这里,哪里有误,还望指出~
移码就是在数X上增加一个偏移量来定义。对于在偏移2的n-1次方的情况下,只需要将补码的符号位取反就可以获得相应的移码。
拿1与-1举例,1的补码是0 0000001,那么它的移码就是,1 0000001。-1的补码是1 1111111,那么它的移码就是0 1111111。
到这里,原码、反码、补码与移码就介绍完毕了。
综上所述,正数的原码,反码,补码都是一样的,所以正数是不太难理解的。
对于负数,反码是在原码基础上,除了符号位不变,其余位都取反,而补码就是在反码基础上,末尾加1。
对于移码来说,在偏移2的n-1次方的情况下,只需要将补码的符号位取反就可以获得相应的移码。
特别的,在原码中0有两种表示方式:[+0]原=0000000,[-0]原=1000000。
在反码表示中,0也有两种表示形式:[+0]反=0000000,[-0]反=11111111。
在补码表示中,0有唯一的编码:[+0]补=0000000,[-0]补=0000000。
以上都是基于我浅浅的理解写的一篇文章,错误之处,还望指正。
感谢您的阅读~
大家都知道,在计算机中都是以0和1来传递信息的,所以我们将各种数值在计算机中表示的形式称为机器数,特点就是采用二进制计数制。那么为了便于计算,机器数又可以采用原码、反码、补码与移码等不同的编码方法,而这种编码方法称为码制。
这篇文章,就尝试将这种码制解释一下。在开始之前,首先达成一个共识,在表示方法中,最高位是符号位,0表示正号,1表示负号。如果机器字长为n,则表示用n个二进制位表示数据。是不是有点儿绕?说白了就是规定机器字长为n,那就是n个数字。在这里,n取为8。好了,接下来进入正题
1,原码:
在原码中,除了最高位是符号位之外,其余都表示数值的绝对值。举个栗子:1的原码为0 0000001,-1的原码为1 0000001(最高位也就是第一个数字,是符号位)
在这里,如果对1+(-1)进行运算,那么应该为0。但是如果以原码进行计算,我们发现结果为1 0000010,转换为十进制则为-2。与实际相比,误差较大。所以还需要别的编码规则,比如反码。
2,反码:
对于正数来说,反码与原码是相同的。
但是对于负数来说,反码与原码,除了最高位不变之外,其余位取反(毕竟是反码反码,怎么体现呢?就是通过其余位取反来体现的)。比较难以理解对吧,咱们拿-1来举例,-1的原码为1 0000001,那么-1的反码就是1 1111110。这样是不是就好容易理解一些~
同样,如果将1的反码与-1的反码进行运算,我们发现结果为1 1111111,将反码弄为原码为0 0000000,也就是十进制中的0,是不是误差较原码相比,就小一些。
3,补码:
正数的补码与原码相同。
对于负数来说,补码就是在反码基础上,末尾加1。同样举个例子,通过上面我们知道,-1的反码为1 1111110,那么在末尾加1之后,则变为1 1111111,那么8个1就是-1的补码。
同样,如果将1的补码与-1的补码进行运算,结果为0 0000000。结果直接就为0,不像反码那样,还需要再转换一下。
基于此,补码是应用较为广泛的。
4,移码:
对于移码,我感觉我的理解也是有些偏差。先写在这里,哪里有误,还望指出~
移码就是在数X上增加一个偏移量来定义。对于在偏移2的n-1次方的情况下,只需要将补码的符号位取反就可以获得相应的移码。
拿1与-1举例,1的补码是0 0000001,那么它的移码就是,1 0000001。-1的补码是1 1111111,那么它的移码就是0 1111111。
到这里,原码、反码、补码与移码就介绍完毕了。
综上所述,正数的原码,反码,补码都是一样的,所以正数是不太难理解的。
对于负数,反码是在原码基础上,除了符号位不变,其余位都取反,而补码就是在反码基础上,末尾加1。
对于移码来说,在偏移2的n-1次方的情况下,只需要将补码的符号位取反就可以获得相应的移码。
特别的,在原码中0有两种表示方式:[+0]原=0000000,[-0]原=1000000。
在反码表示中,0也有两种表示形式:[+0]反=0000000,[-0]反=11111111。
在补码表示中,0有唯一的编码:[+0]补=0000000,[-0]补=0000000。
以上都是基于我浅浅的理解写的一篇文章,错误之处,还望指正。
感谢您的阅读~
相关文章推荐
- [转]原码、反码、补码、移码
- 计算机原码、反码、补码、移码
- 原码、补码、反码及移码
- 原码 反码 补码 移码的关系(精简总结)
- 深入理解计算机系统-之-数值存储(三)-- 原码、反码、补码和移码详解
- 自己实现的原码、反码、补码、移码的表示与加减运算软件
- 【Dognle】【计算机硬件】原码、反码、补码、移码
- C语言基础 原码、反码、补码和移码详解
- 机器数的原码、反码、补码、移码表示以及浮点数的二进制表示
- 原码、反码、补码、移码解惑
- 原码、反码、补码和移码的相关概念
- 原码、反码、补码、移码
- 原码-反码-补码-移码的运算及作用
- 原码,反码,补码,移码
- 知识点-原码补码反码移码
- 计算机组成原理之原码、补码、反码和移码
- java 自我知识总结(一) 原码 反码 补码 移码
- 原码、反码、补码、移码
- 软件设计师考试笔记一:原码、反码、补码及移码
- 真值,原码,反码,补码和移码 释义