【软考6】码制:原码、反码、补码、移码
2015-10-24 17:28
453 查看
导读:计算机系统帮助我们解决现实生活中的实际问题,而现实生活中的实际问题可以抽象为一些未经过处理的数据,这些数据在计算机里是怎样表示的?又有哪些表示方式呢?原来计算机有自己的一套编码机制:原码、反码、补码、移码。
为什么计算机要有码制:在现实生活中的问题数据,基本都是十进制,而作为计算机是无法理解十进制的,计算机的编码都是由0和1组成,所以我们要将我们的问题通过0和1进行描述。而数值从大范围来讲,可以简单分为两个部分:正数、负数、0。在计算机里面,用一个数的最高位存放符号(0为正,1为负),这就是原码的产生!
原则:最高位表示正负,其余位表示数值
步骤:1,将欲要表达的数,用二进制表达出来;2,在最高位标识符号;3,缺位用0填补
实例:[+8]原=0 0001000 [-8]原=1 0001000
备注:0既不属于正数,也不属于负数。所以,0的表示方法有两种:[0]原=1 0000000, [0]原=0 00000000
有了原码,将数值进行编码后,就可以对数值进行运算,但是作为原码运算具有一定的缺陷性,比如:[+8]原+ [-8]原=1 0010000,这时候,为了解决这一问题,出现了反码。
原则:最高位是符号位,正数反码=正数原码,负数反码=绝对值按位取反。
实例:[+8]反=0 0001000 [-8]反=1 1110111
经过反码对原码的优化,我们解决了数值运算的问题,但是作为反码运算,又出现了一个新的问题,比如:[+8]反+ [-8]反=[0 0001000]反+[1 1110111]反=[11111111]反=[10000000]原=-0。0既不为正数,也不为负数,所以0带任何符号都是没有意义的,为了解决这一问题,出现了补码。
原则:最高位是符号位,正数补码=正数反码=正数原码,负数补码=负数反码+1
实例:1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原
用补码表示阶码的时候,当阶码无限小,产生了下溢的时候,阶码变成了0,那么这个浮点数的值变为了1。而实际上这个数是无限接近于零的。那么我们就需要取出其中的 "-0“ 值作为机器零,于是移码产生了。
原则:在偏移2的n减一次方的情况下,移码的获得,只需要将补码的符号位取反即可。
实例:[0]补=[00000000] ——>[0]移=[1 0000000]
为什么计算机要有码制:在现实生活中的问题数据,基本都是十进制,而作为计算机是无法理解十进制的,计算机的编码都是由0和1组成,所以我们要将我们的问题通过0和1进行描述。而数值从大范围来讲,可以简单分为两个部分:正数、负数、0。在计算机里面,用一个数的最高位存放符号(0为正,1为负),这就是原码的产生!
一、原码
1.1,概念
原码(true form):是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。1.2,例子
前提:字长=8原则:最高位表示正负,其余位表示数值
步骤:1,将欲要表达的数,用二进制表达出来;2,在最高位标识符号;3,缺位用0填补
实例:[+8]原=0 0001000 [-8]原=1 0001000
备注:0既不属于正数,也不属于负数。所以,0的表示方法有两种:[0]原=1 0000000, [0]原=0 00000000
有了原码,将数值进行编码后,就可以对数值进行运算,但是作为原码运算具有一定的缺陷性,比如:[+8]原+ [-8]原=1 0010000,这时候,为了解决这一问题,出现了反码。
二、反码
2.1,概念
反码:是计算机中表示二进制数的一种方法,若原码的符号位不变,对其余位逐位取反,即得到其反码。2.2,例子
前提:字长=8原则:最高位是符号位,正数反码=正数原码,负数反码=绝对值按位取反。
实例:[+8]反=0 0001000 [-8]反=1 1110111
经过反码对原码的优化,我们解决了数值运算的问题,但是作为反码运算,又出现了一个新的问题,比如:[+8]反+ [-8]反=[0 0001000]反+[1 1110111]反=[11111111]反=[10000000]原=-0。0既不为正数,也不为负数,所以0带任何符号都是没有意义的,为了解决这一问题,出现了补码。
三、补码
3.1,概念
补码(2's complement):是一种用二进制表示有号数的方法,也是一种将数字的正负号变号的方式,常在计算机科学中使用。3.2,例子
前提:字长=8原则:最高位是符号位,正数补码=正数反码=正数原码,负数补码=负数反码+1
实例:1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原
用补码表示阶码的时候,当阶码无限小,产生了下溢的时候,阶码变成了0,那么这个浮点数的值变为了1。而实际上这个数是无限接近于零的。那么我们就需要取出其中的 "-0“ 值作为机器零,于是移码产生了。
四、移码
4.1,概念
移码(又叫增码):是符号位取反的补码,一般用做浮点数的阶码,引入的目的是为了保证浮点数的机器码为全0。4.2,例子
前提:字长=8原则:在偏移2的n减一次方的情况下,移码的获得,只需要将补码的符号位取反即可。
实例:[0]补=[00000000] ——>[0]移=[1 0000000]
五、总结
这次是将码制进行了一个整理总结,但是作为小数的码制,这一块还很模糊,需要进一步的学习,也希望有明白小数是怎么转换的人,对我多多指导!相关文章推荐
- Android异步消息处理机制
- 阿里百川-TAE安装openfire服务记录
- android的消息处理机制
- 乱乱
- MYsql查询高速缓存设置
- OC类的三大特性:继承,封装和多态
- Java之网络爬虫WebCollector+selenium+phantomjs(一)
- CCNA学习笔记7--动态路由协议概念和RIP
- leetcode 19 Remove Nth Node from end of list
- SPOJ LCS2 Longest Common Substring II
- Linux 进程绑定CPU用taskset
- Android样式与主题浅析
- 电脑引导那些事(2)--UEFI下win8.1咋改win7,咋装双系统,咋不能激活?
- 编写一个孤儿进程,这个孤儿进程可以同时创建100个僵死进程
- posix信号量对system V共享内存的同步控制
- 段树 基于单点更新 敌人阵容
- 乱
- Android studio设置启动时不自动打开上次关闭的项目
- 输出一个整数的每一位
- windows下通过services.msc命令把某些服务停止引起系统运行异常的事宜