本文主要是介绍计算机组成第五章 中央处理器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、无符号数与有符号数
在计算机中参与运算的有两种数,有符号数和无符号数
1.1 无符号数
计算机中的数放在寄存器中,通常称寄存器的位数为机器字长。无符号数就是寄存器中的每一位都可以存放数值。但如果是有符号数就要留出符号位以判断是正数还是负数。
例如机器字长若为16位,则无符号数范围:0~2^16 = 65536,有符号数范围:-(2^16))/2 ~(2^16)/2-1 = -32768~32767 (因为中间还有一个0占了正数的一个位置,所以到32767)
1.2 有符号数
1. 机器数与真值
我们平时说的-15,98,0都是真值,但是怎么让计算机知道一个数的正负呢,他只看得懂01看不懂正负号,因此我们用“0”表示“正”,用“1”表示“负”,这样的数就叫做机器数
2.原码、补码、反码
(1)原码
x为真值,n为位数,用逗号将符号位和数值分开
正整数原码 = 0,x,小数:x
负整数原码 = 1,x,小数:1-x
(2)反码
正数的反码 = 原码
负数的反码 = 符号位不变,其余全部取反
(3)补码
正数补码 = 原码
负数补码 = 符号位不变,反码+1
3.浮点表示
浮点数 = 符号位 + 阶码 + 尾数
单精度:4字节 32位
双精度:8字节 64位
例:13/128转换成二进制定点数和浮点数,设浮点字长16位,阶码5位(含一位阶符),尾数11位(含1位数符)
1)首先把数字转换为二进制的科学计数法:
13/128 = 0.1015625 = 0.0001101000(B) = 0.1101000*2^(-11)
-11就是-3,因为是二进制
2)我们就找到了阶码-3,-3<0,所以阶符是1,即1 0011
3)尾数为1101000是正的,数符是0,即11010000000,
合起来就是1 0011 0 11010000000
所以在定点机中X[原] = X[补] = X[反] = 0.0001101000
浮点机中X[原] = 1 0011 0 11010000000 或 1,0011;0,11010000000
X[反] = 1 1100 0 11010000000
X[补] = 1 1101 0 11010000000
注意:要根据符号位写补码与反码!!!!😀😀😀
4.定点运算
4.1 移位运算
1)左移:m<<n = m*2^n
整体左移,后面补0
16 = 11010(B),
16<<1 = 32,16<<2 = 64;
2)右移:m>>n = m/2^n
正数右移:左侧补0,负数右移左侧补1
46>>1 = 23,23>>1 = 12
3)无符号右移:>>>
正数右移:左侧补0
负数右移:左侧补0
26>>>1 = 13;
4.2 补码加减法运算
加减法其实就是正负数进行加的运算,所以一般都用补码进行计算。
10+11 = 01(2+3=1):5%4
11+11= 10(3+3=2):6%4
整数:所以其实丢掉前面那位就是取余2^(n+1)
小数:%2
4.3 溢出
4.3.1用一位符号判断溢出
只有正数和正数、负数和负数才会溢出,所以当参加运算的两个数符号相同,结果符号又与运算数不同时记为溢出。
例:0,101+0,100=1,001 就是溢出
-0.1000 + (-0.1000) = 1.1000 + 1.1000 = 11.0000,与参与运算的数符号位相同,所以无溢出
4.3.2 两位符号判断溢出
当两位符号位不同时表示溢出,否则不溢出
4.4 乘法运算
这篇关于计算机组成第五章 中央处理器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!