Knowledge Point 20180305 数据在计算机中的表示
计算机发明的初衷就是用于帮助我们加工和处理数据,虽然时至今天计算机看起来无所不能,但它根本上还是在做数据的加工和处理,数据的机器层次表示将直接影响到计算机的结构和性能。
在计算机中,采用数字化方式来表示数据,数据有无符号数和带符号数之分,其中带符号数根据其编码的不同又有原码、补码和反码3中表示形式。下面我们来认识一下;
无符号数和带符号数
所谓无符号数,就是整个机器字长的全部二进制位均表示数值位(没有符号位),相当于数的绝对值,大致相当于数学中的自然数。如01000001表示无符号数65,11000001表示无符号数193。机器字长为n+1位的无符号数的表示范围是0 ~(2^(n+1) - 1),此时二进制的最高位也是数值位,其权值等于2^n。如字长为8,那么数的表示范围就是0~255。一般计算机中都会有一些无符号数的运算和处理指令,如条件转移指令等。
然而,如同我们现实世界所见的大部分数据一样,它还是需要区分正负(“+”“-”)的。在日常生活中我们使用正负和绝对值来表示数值的大小,用这种形式表示的数值在计算机技术中称为“真值”。
对于数的符号“+”和“-”,计算机是无法识别的(实际上除了0和1,计算机什么也识别不了),因此需要把符号数码化。通常约定二进制数的最高位为符号位,“0”表示正号,“1”表示负号。这种在计算机中使用的表示数的形式称为机器数,常见的机器数有原码、反码和补码等不同的表现形式。
区别于无符号数,带符号数的最高位被用来表示符号,如上面的01000001表示带符号数为正65,11000001表示带符号数为-65。为了能正确的区别出真值和各种机器数,我们用X表示真值,[X]原表示原码,[X]补表示补码,[X]反表示反码。原码、补码和反码是计算机中的几种表现形式,目的在于能够使计算机对数据的一系列运算得出正确结果。
原码表示法
原码表示法是一种最简单的机器数据表示法,其最高位是符号位,数值部分则与真值相同。
若真值是纯小数,那么原码的定义为:
[X]原 = X 0<=X<1
[X]原 = 1-X = 1+|X| -1<X<=0
若真值为纯整数,它的原码定义为:
[X]原 = X 0<=X<2^n
[X]原 = 2^n-X = 2^n + |X| -2^n<X<=0
因为原码具有符号位,所以原码中的0是有两种表示形式的
[+0]原 = 00000
[-0]原 = 10000
原码表示法的优点是直观易懂,机器数和真值间的相互转换很容易,用原码实现乘除运算阿德规则很简单;缺点则是实现加减运算的规则较为复杂.
补码表示法
在介绍补码之前,先认识一下模和同余。
模和同余
我们这里所说的模和通常所见的模数是不同的概念,这里所说的模(Module)是指一个计量器的容量,可用M表示。例如:一个4位的二进制计数器,当计数器从0开始计数到15之后,再加1,计数器的值就又会变成0。这个计数器的容量M = 2^4 = 16,即模为16。由此可见,纯小数的模为2(二进制计数中对于纯小数,它们的模永远都是2,因为一旦小数位全为1后就会进位位整数位,所以小数位的周期都是2,即模数(容量)为2。),一个字长为n+1位的纯整数的模为2^(n+1)。
同余概念是指两个整数A和B除以同一个正整数M,所得余数相同,则称A和B对M同余,即A和B在以M为模时是相等的,可写作
A = B(mod M)
生活中最常见的同余莫过于时钟了,对于时钟而言,其模M = 12,故4点和16点、5点和17点、……均是同余的,它们可以写作
4 = 16(mod 12) 5 = 17(mod 12)
利用模和同余概念的补码表示法在进行算术运算时可以使减法运算转化成加法运算,从而简化机器的运算器电路。
还以时钟为例,假如时钟停留在8点,而现在正确的时间是6点,这时拨准时种的方法有两种:
- l 将分针倒着拨两圈(即倒拨两小时)8-2=6(这是通过减法实现的)。
- l 将分针正着旋转10周(即正拨10小时)8+10=6(mod 12)(这是通过加法实现的)
此时 8 - 2 = 8 + 10(mod 12)
设:A = -2 , B = 10
则:10/12 = (12-2)/12 = 1 + (-2/12)
上面-2和10也是同余。同余的两个数具有互补的关系,-2和10对模12互补,也就是说-2的补数是10(以12位模)。
由此可见,只要确定了“模”,就可找到一个与负数等价的正数(该正数即为负数的补数)来代替此负数,而这个正数可以用模加上负数本身求得,这样就可把减法运算转换为加法运算实现了。而将补数概念运用到计算机中就出现了补码这种机器数。
[X]补 = X (mod M) 0 <= X < M/2
[X]补 = (M + X)(mod M) (-M/2) <= X < 0
补码表示
补码的符号位表示方法和原码相同,其数值部分的表示与数的正负有关:对于正数其数值部分与真值形式相同;对于负数,将真值的数值部分按位取反,且在最低位上加1。
若真值为纯小数,它的补码表示为:
[X]补 = X (mod 2) 0 <= X < 1
[X]补 = (2 + X)(mod 2) = (2-|X|)(mod 2) -1 <= X < 0
若真值是纯整数,它的补码为:
[X]补 = X 0<=X<2^n
[X]补 = X + 2^(n+1) = 2^(n+1) - |X| -2^n<X<=0
在补码表示中,0的表示形式是唯一的:
[+0]补 = [-0]补 = 00000
反码表示法
反码表示法与补码表示法有许多类似之处,对于正数,数值部分与真值形式相同;对于负数,将真值的数值部分按位取反。它与补码的区别是末位少加一个1,因而很容易从补码的定义推出反码的定义。
三种机器数的比较与转换
通过上面的学习,我们知道数值在计算机中的三种表现形式,下面我们针对这三种数据进行比较学习;
比较
原码、反码、补码这三种机器数既有共同点,又有各自不同的性质,主要区别有一下几点:
- l 对于正数它们都等于真值本身,对于负数有各自的表现形式。
- l 最高位都用来表示符号位,补码和反码的符号位可作为数值位的一部分看待,和数值一起参与运算;但原码的符号位不允许和数值位同等看待,必须分开处理。
- l 对于真值0,原码和反码各有两种不同的表现形式,而补码只有唯一的表现形式。
- l 原码、反码表示的正负数范围相对零来说是对称的;但补码负数表示范围较正数表示范围宽,能多表示一个最负的数(绝对值最大的负数),其值等于-2^n(纯整数)或-1(纯小数)。
Knowledge Point 20180305 数据在计算机中的表示的更多相关文章
- Knowledge Point 20180305 补位的两种方式
我们都知道Java的基本数据类型内存中都有一个固定的位数(内存分配空间),如byte占8位,int占32位等.正因如此,当把一个低精度的数据类型转成一个高精度的数据类型时,必然会涉及到如何扩展位数的问 ...
- Knowledge Point 20180305 机器数转换与进制转换
机器数(这里的机器数说的就是数值在计算机中的存储形式,相关可以了解数据在计算机中的表示)之间的转换往往是通过原码来实现的,下面我们结合进制来来一下: 进制也就是进位制,是人们规定的一种进位方法. 对于 ...
- Java练习小题_求一个3*3矩阵对角线元素之和,矩阵的数据用行的形式输入到计算机中 程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
要求说明: 题目:求一个3*3矩阵对角线元素之和,矩阵的数据用行的形式输入到计算机中 程序分析:利用双重for循环控制输入二维数组,再将 a[i][i] 累加后输出. 实现思路: [二维数组]相关知识 ...
- 计算机中位(bit), 字节(byte), 字(word)的关系
1.位(bit) 来自英文bit,音译为“比特”,表示二进制位.位是计算机内部数据储存的最小单位,11010100是一个8位二进制数.一个二进制位只可以表示0和1两种状态(21):两个二进制位可以表示 ...
- (转)原始图像数据和PDF中的图像数据
比较原始图像数据和PDF中的图像数据,结果见表1.1.表1.1中各种“解码器”的解释见本文后续的“PDF支持的图像格式”部分,“PDF中的图像数据”各栏中的数据来自开源的PdfView.如果您有兴趣查 ...
- 使用程序获取整型数据和浮点型数据在内存中的表示---gyy整理
使用程序获取整型数据和浮点型数据在内存中的表示. C++中整型(int).短整型(short int).单精度浮点数(float).双精度浮点数(double)在内存中所占字节数不同,因此取值范围也不 ...
- 计算机中的大小端模式及C语言中如何鉴别他们
我的博客:www.while0.com 参考http://blog.csdn.net/ce123_zhouwei/article/details/6971544 写的很详细. 大小端主要是对数字类型来 ...
- C/C++数据在内存中的存储方式
目录 1 内存地址 2 内存空间 在学习C/C++编程语言时,免不了和内存打交道,在计算机中,我们存储有电影,文档,音乐等数据,这些数据在内存中是以什么形式存储的呢?下面做一下简单介绍. 本文是学 ...
- 聊聊计算机中的编码(Unicode,GBK,ASCII,utf8,utf16,ISO8859-1等)以及乱码问题的解决办法
作为一个程序员,一个中国的程序员,想来“乱码”问题基本上都遇到过,也为之头疼过.出现乱码问题的根本原因是编码与解码使用了不同而且不兼容的“标准”,在国内一般出现在中文的编解码过程中. 我们平时常见的编 ...
随机推荐
- JavaScript基础(String)
字符串 String 1.连接字符串 数字与字符串相加,为字符串 9+"9"; 2.字符串的长度 "abc".length; 3.从字符串中获取单个字符(索引下 ...
- nginx配置文件分开配置
在Linux中不同的用户都可能用到Nginx,如果不同的用户无法达成一个对nginx.conf编写标准,势必会导致nginx.conf里的内容变的相当混乱,极难维护.所以这里建议新建一个文件夹,这个文 ...
- 2017 年 9 月 27 日 js(文本框内容添加到select)
写法 <!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- 【MSDN】 SqlServer DBCC解析
汇总学习下SqlServer的DBCC指令. DBCC:Transact-SQL 编程语言提供 DBCC 语句以作为 SQL Server 的数据库控制台命令. 数据库控制台命令语句可分为以下类别. ...
- Introduction of Servlet Filter(了解Servlet之Filter)
API文档中介绍了public Interface Filter(公共接口过滤器) Servlet API文档中是这样介绍的: ‘A filter is an object that performs ...
- javascript对象(2)
这个对象,不是那个对象.续更第二篇.. 昨天说了对象的基本概念以及创建,今天来说一下它的其他方法: 1.访问属性的两种方式:点语法.[]语法 var dog =new Object(); dog.na ...
- css background 背景知识详解
background 背景属性 我们知道元素有前景色color,与之对应的还有背景色,通过background我们可以为元素添加实色(background-color)和任意多个背景图片(backgr ...
- 移动端点击a链接出现蓝色背景问题解决
a:link, a:active, a:visited, a:hover { background: none; -webkit-tap-highlight-color: rgba(0,0,0,0); ...
- ArcGIS图框工具5.2发布,支持ArcGIS10.0,10.110.2,支持国家2000坐标系
ArcGIS图框工具5.2发布,支持ArcGIS10.0,10.110.2,支持国家2000坐标系 下载地址http://files.cnblogs.com/gisoracle/atktoolnew. ...
- Oracle数据库错误消息
Oracle数据库错误消息 导出错误消息 l EXP-00000导出终止失败 原因:导出时产生Oracle错误. 操作:检查相应的Oracle错误消息. l EXP-00001数据域被截断 - 列长度 ...