数据的表示
简介
由于受计算机的硬件决定,任何存储在计算机中的数据,其本质都是以0 1二进制码的形式来进行存储的。
根据冯诺依曼提出的经典计算机体系结构框架,一台计算机还有运算器、控制器、存储器、输入和输出设备组成。
其中运转器它只有加法运算器,并没有减法运算器。据说一开始是有减法预算器的,只是后来由于减法运算器它的硬件开销比较大,然后就被废除了。 所以在计算机当中是没有办法直接做减法的。它的减法是通过做加法来实现的。
在我们的现实世界当中,所有的减法也可以当做加法来进行,比如说减去一个数,可以看作是加上这个数的相反数。例如,2-1 可以看作是2+(-1),所以这么计算的前提条件是先要有负数的概念。这就是为什么我们的二进制数要引入一个符号位。
符号位在内存当中放在最左边的一位。比如说1101。它最左边的一位,也就是他的符号位。该位如果为0,代表是一个正数;如果为1,代表是一个负数。
而且从硬件的角度上来看,只有正数加负数才算是减法,正数与正数相加,负数与负数相加,其实都可以通过加法器来直接相加。
我们后面讲到的源码、反码和补码的产生过程,就是为了解决计算机做减法和引入符号位的问题。
二进制转十进制
按权相加法
无符号的二进制整数
从右往左依次用二进制位上的位数乘以2的n次幂的和(n大于等于0)
例如:1 1 0 = 1 * 2² + 1 * 2¹ + 0 * 2º = 4 + 2 + 0 = 6
1 | 1 | 0 | |
---|---|---|---|
位数 | 第2位 | 第1位 | 第0位 |
相乘 | 1 * 2² | 1 * 2¹ | 0 * 2º |
带符号的二进制整数
除去最高的符号位(1为负数,0为整数),其余与无符号二进制转化为是兼职方法相同
例如:1 1 0 1 = 1 101 = - (1 * 2² + 0 * 2¹ +1 * 2º)= -5
小数二进制
从小数点后第1位上的二进制数字乘以2的负一次方,
加上第二位上的二进制数字乘以2的负二次方,
以此类推第N位上的二进制数字乘以2的负N次方
例如:101.011 = 1 * 2² + 0 * 2¹ + 1 * 2º + 0 * 2-1 + 1 * 2-2 + 1* 2-3 = 4+0+1 + 0 + 1 * ½ + 1* ¼ + 1 *
1
8
\frac 18
81 = 5.375
练习题
将二进制1100.101转化为十进制,结果是()。
A. 12.625
B. 12.75
C. 24.625
D. 24.75
答案:A
十进制转二进制
转化整数
- 将整数部分除
2
- 取余当商不为0时
- 将商作为被除数
- 继续除
2
取余直至商为0 - 将余数按
从下到上
的顺序记录
转化小数
- 将小数部分乘
2
取整 - 如果结果仍有小数就继续乘
2
- 直到小数部分为0
- 或者已经达到了精度要求
- 将取整的结果按
从上到下
的顺序记录
举例:112.25
整数部分:1110000
小数部分:01
所以112.25 = 1110000.01
练习题
将十进制11.75转化为二进制,结果是()。
A.1011.11
B.1010.11
C.1010.01
D.1011.01
答案:A
原码
最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值的绝对值。
数值0的原码表示有两种形式:[+0]原=0 0000000,[-0]原=1 0000000
以带符号位的四位二进制数为例:1 010,最高位为1表示这是一个负数
其它三位010,即02²+12¹+0*2º=2
所以1010表示十进制数-2
二进制和十进制的转换参考文章二进制和十进制
加法和减法运算
用二进制原码计算1+2 = 3,可以看出加法运算结果没有问题
用二进制原码计算 1 - 1 = 1 + (-1) = 0,可以看出减法运算结果不正确,这都是符号位引起的
练习题
若机器字长为8,则+127和-0.5分为表示为()
A. 01111111,01000101
B. 01111111,11000000
C. 11111111,01000000
D. 10000000,11000101
答案:B
反码
原码最大的问题就在于一个数加上它的相反数不等于0
0001+1001=1010,1+(-1)=-2
- 正数的反码还是等于原码。+3 = 0 011
- 负数的反码就是它的原码除符号位外,其它位按位取反。-3 = 1 100
- 数值0的反码表示有两种形式:[+0]反=0 0000000,[-0]反=1 1111111
用反码解决1+(-1)= -2问题。用反码相加
我们再看一下两个负数相加(-1)+(-3),可以看到计算结果错误,说明用反码计算两个负数相加会出错。所以计算机当中的运算名下不能用反码,那么反码存在的意思是什么?在数码变换当中,它是一个中间环节,在下一节补码就能看到反码的作用了。它起到了中间环节的作用。
练习题
若机器字长为8,则+45和-45的反码分为表示为()
A. 10101101,01000101
B. 10101101,01000000
C. 00101101,10101101
D. 00101101,11010010
答案:D
补码
- 正数的补码等于它的原码
- 负数的补码等于反码+1或等于(2机器字长-|负数|)原码
- 数值0有唯一的编码:[+0]补=00000000,[-0]补=00000000
-5的补码=(24- 5)原码=11原码=1011
例:若机器字长为4,计算6-2
-2 = (24-|-2|)原码 = 14 原 = 1110
6+(-2)= 0110+1110 = 0100补码 = 0100原=4 ,可以看出计算结果正确
计算机中均采用补码进行加减运算
练习题
- 如果“2X”的补码是“90H”,那么X的真值是()(2016上半年试题
A.56
B.-56
C.72
D.-72
答案:B
H代表是16进制的数,1位H<------->4位B。9 = 1001, 0 = 0000。所以90H = 1001 0000
- 计算机系统中采用补码表示有符号的数值,()。(2022下半年试题)
A.可以保持加法和减法运算过程与手工运算方式一致
B.可以提高运算过程和结果的精准程度
C.可以提高加法和减法运算的速度
D.可以将减法运算转换为加法运算从而简化运算器的设计
答案:D
移码
移码:补码的符号位取反
移码的主要用途是表示浮点数的指数(阶码)
原码VS反码VS补码VS移码
浮点数
考查频率不高
在计算机当中,所有的数据格式都是0 1 二进制。如果小数点固定在数值的前面或者后面,就叫定点数
,比如前面内容里的原码、反码、补码、移码都是定点数。除了定点数以外还有浮点数
。
-
浮点数表现形式:
N=尾数 X 基数阶码(指数)
基数都是固定的,二进制是2,十进制是10…
尾数是由一个小数组成的,阶码是由一个整数组成的
例如:十进制1.25 * 103,1.25是尾数,3是指数 -
浮点数的表示格式:
阶符 阶码(移码) 数符 尾数(补码) -
尾数:用补码表示,位数决定数的有效精度,位数越多精度越高
-
阶码:用移码表示,位数决定数的表示范围,位数越多范围越大
-
对阶时,小数向大数看齐,如下图
-
对阶是通过较小数的尾数右移实现的
练习题
浮点数的表示分为阶码和尾数两部分。两个浮点数相加时,需要先对阶,即()(为
阶差的绝对值)。(2018上半年试题)
A.将大阶向小阶对齐,同时将尾数左移n位
B.将大阶向小阶对齐,同时将尾数右移n位
C.将小阶向大阶对齐,同时将尾数左移n位
D.将小阶向大阶对齐,同时将尾数右移n位
答案:D