如果文章被设置为VIP可见,请点击备用-掘金
*做题笔记1
学习内容:
- 教材的思维导图
- 课后练习(计算部分)
- 中国大学MOOC计算机组成原理(计算部分)
1.教材的思维导图
2.课后练习(计算部分)
1.由3个"1"和5个"0"组成的8位二进制补码,能表示的最小整数是__-125___。
既然要求的是最小整数,那么肯定是负数了,那么第一位可以确定为1,然后根据原反补码的计算规则,可以很轻易的排列出
当 补码=10000011 时,反码=10000010,原码=11111101---> 真值= -125
2.考虑以下C语言代码:
unsigned short usi=65535;
short si=usi;
执行上述程序段后,si的值为___-1____。
unsigned short无符号短整型,占2个字节,而short有符号短整型,占2个字节且第一位为符号位,所以将usi赋值给si时,需要注意符号位,简单来说,就是把usi原码算出来,然后根据符号位将真值算出来,就是si的值。
那么[usi] 补码 =1111 1111 1111 1111
[usi] 反码=1111 1111 1111 1110
[usi] 原码=1000 0000 0000 0001
所以,[si] 真值=-1
3.假定编译器规定int和short类型长度分别为32位和16位,执行下列C语言语句:unsigned short x=65530; unsigned int y=x; 得到y的机器数为___0000FFFAH_____。
根据C语言整型数据类型转换方法:
1.相同字长的整型数据转换:不管是有符号转无符号还是无符号转有符号,机器码不变
2.小字长转大字长:无符号小字长转无符号大字长,机器码零扩展;有符号小字长转大字长,机器码符号扩展
3.大字长转小字长,机器码截断 ---P37
所以由题意得,unsigned short转unsigned int,无符号小字长转无符号大字长,机器码零扩展。
unsigned short x=1111 1111 1111 1010
unsigned int y=0000 0000 0000 0000 1111 1111 1111 1010=0000FFFAH
4.有如下C语言程序段:short si=-32767; unsigned short usi=si; 执行上述两条语句后,usi的值为__32769___。
根据前面的整数转换方法,这题是第一种情况,有符号转无符号,只需要保证机器码不变就行
[si] 原=1111 1111 1111 1111
[si] 反=1000 0000 0000 0000
[si] 补=1000 0000 0000 0001
[si] 机器码=8001H
[usi] 机器码=8001H
[usi] 真值=32769
5.float型数据通常用IEEE754单精度浮点数格式表示。若编译器将float型变量x分配在一个32位浮点寄存器FR1中,且X=-8.25,则FR1的内容是__C104H____。
首先将X转成二进制得:-1000.01=-1.00001*2^3
根据上面流程图里的公式计算:
S=1
E=e+127=3+127=130=1000 0010
M=000 0100 0000 0000 0000 0000
所以FR1=1100 0001 0000 0100 0000 0000 0000 0000=C104H
6.某数采用IEEE754单精度浮点数格式表示为C640 0000H ,则该数的值是_-1.5*2^13_。
首先把这个十六进制数转成二进制
f=C6400000H=(1100 0110 0100 0000 0000 0000 0000 0000)B
S=1
e=E-127=1000 1100-127=140-127=13(个人感觉转成十进制更好算)
M=100 0000 0000 0000 0000 0000
将其代入公式并按权展开,-1.100*2^13=-1.5*2^13
11.用海明码对长度为8位的数据进行检错和纠错时,若能纠正一位错,则校验位数至少为_4__。
公式 n=2*r-1>=k+r
因为k=8,所以r最小是4
2.9用IEEE754 32位单精度浮点数标准表示下列十进制数。
1.-6又5/8
整理整理,该数=-53/8=-6.625=(-110.101)B=-1.10101*2^2
S=1
E=127+2=129=1000 0001
M=101 0100 0000 0000 0000 0000
f=1100 0000 1101 0100 0000 0000 0000 0000=C0D40000H
2. 3.1415927
首先将其转换成二进制数,整数部分除二取余,小数部分乘二取整。
3. 64000
64000=37268+16384+8192+4096+2048+512=(1111101000000000)B=1.111101*2^15
S=0
E=15+127=142=1000 1110
M=111 1010 0000 0000 0000 0000
f=0100 0111 0111 1010 0000 0000 0000 0000=477A0000H
2.10 求与单精度浮点数43940000H对应的十进制数。
f=4340000H=(0100 0011 1001 0100 0000 0000 0000 0000)B
S=0
E=1000 0111-127=135-127=8
M=001 0100 0000 0000 0000 0000
将其代入公式并按权展开,+1.00101*2^8=100101000=+296
2.14 将下列十进制数表示成浮点规格化数,阶码为4位,尾数为10位,各含1位符号,阶码和尾数均用补码表示。
所谓规格化处理就是使得尾数真值最高有效位为1,也就是尾数的绝对值应大于或等于(0.1)2或(0.5)10。除使尾数真值大于0.5外,还有一种规格化数也经常使用,就是使得尾数绝对值大于1、小于2,这种规格化数参考了十进制科学记数法的表示方法。 ---P27
1.57/128
57/128=0.4453125=0.0111001 原反补=0.0111001=0.111001*2^-1
S=0
E=-1 因为阶码要4位,且用补码表示。 E 原=1001 E补=1111
尾数为10位,且用补码表示 M=0111001000
浮点规格化数=1111 0111001000
2.-69/128
-69/128=-0.5390625=-0.1000101 原=1.1000101 反=1.0111010 补=1.0111011
S=1
E=0 E补=0000
M补=1011101100
浮点规格化数=0000 1011101100
2.14 设有效信息为01011011.分别写出其奇校验码和偶校验码。如果接收方收到的有效信息为01011010,说明如何发现错误。
奇偶校验的编码规则是增加以为校验位P,使得最终的校验码中数字1的个数为奇数或偶数,其最小码距为2。 ---P44
原始数据(8位) | 奇校验码(9位) | 偶校验码(9位) |
01011011 | 010110110 | 010110111 |
我不会
正确答案:如果接收方收到的x=010110100(只有1位出错,最后一个0是校验位),如果采用奇校验,接收方计算检错位G=1,表明数据一定发生了错误。如果采用偶校验,接收方计算检错位G=0,表明数据高概率正确。
2.16 由6个字符的7位ASCII字符排列,再加上水平和垂直偶校验位构成表2.27所示的行列结构(最后一列HP为水平偶校验位,最后一行VP为垂直偶校验位)
字符 | 7位ASCII字符 | HP | ||||||
3 | 0 | X1 | X2 | 0 | 0 | 1 | 1 | 0 |
Y1 | 1 | 0 | 0 | 1 | 0 | 0 | X3 | 1 |
+ | X4 | 1 | 0 | 1 | 0 | 1 | 1 | 0 |
Y2 | 0 | 1 | X5 | X6 | 1 | 1 | 1 | 1 |
D | 1 | 0 | 0 | X7 | 1 | 0 | X8 | 0 |
= | 0 | X9 | 1 | 1 | 1 | X10 | 1 | 1 |
VP | 0 | 0 | 1 | 1 | 1 | X11 | 1 | X12 |
1.从水平方向看,x1和x2比特相同,x3的比特为1,x4的比特为0,x5和x6比特相反,x7和x8比特相同,x9和x10比特相反,x11、x12暂时未知
2.从垂直方向看,可以确定x4的比特为0,x1和x9比特相同,x2和x5比特相同,x6和x7比特相同,x10、x11暂时未知,x3和x8比特相反,x12暂时未知
3.垂直和水平对比,可以很轻易的得出:x4的比特为0,x3的比特为1,x8的比特为0,x7的比特为0,x6的比特为0,x5的比特为1,x2的比特为1,x1的比特为1,x9的比特为1,x10的比特为0
4.所以,x11的比特就为1,x12就为1
5.综上所述,x1=1,x2=1,x3=1,x4=0,x5=1,x6=0,x7=0,x8=0,x9=1,x10=0,x11=1,X12=1
6.Y1=1001001=73 Y2=0110111=55
查阅ASCII表:Y1=I Y2=7
则x1、x2、x3、x4处的比特分别为1110;x5、x6、x7、x8处的比特分别为1000;x9、x10、x11、x12处的比特分别为1011;Y1和Y2处的字符分别为_I_和_7_。
2.17 设8位有效信息为01101110,试写出它的海明校验码。给出过程,说明分组检测方式,并给出指错字及其逻辑表达式。如果接收方收到的有效信息变成01101111,说明如何定位错误并纠正错误。
由公式得,校验位r要有4位
海明码Hi | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
/P1 | /P2 | /b1 0 | /P3 | /b2 1 | /b3 1 | /b4 0 | /P4 | /b5 1 | /b6 1 | /b7 1 | /b8 0 |
P1=/b1+/b2+/b4+/b5+/b7=01011=1 P2=/b1+/b3+/b4+/b6+/b7=01011=1
P3=/b2+/b3+/b4+/b8=1100=0 P4=/b5+/b6+/b7+/b8=1110=1
海明码H=110011011110
如果收到的有效信息是01101111,再加上校验位,海明码H=110011011111
海明码Hi | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
指错字,假设一位错时纠错。
G1=/P1+/b1+/b2+/b4+/b5+/b7=101011=0
G2=/P2+/b1+/b3+/b4+/b6+/b7=101011=0
G3=/P3+/b2+/b3+/b4+/b8=01101=1
G4=/P4+/b5+/b6+/b7+/b8=11111=1
G4G3G2G1=1100
表明H12位出错!取值除了1就是0,所以只需要把H12的值改成0就行
2.18 设要采用CRC码传送数据信息x=1001,当生成多项式为G(x)=1101时,请写出它的循环冗余校验码。若接收方收到的数据信息为x'=1101,说明如何定位错误并纠正错误。
M(x)=x^3+1
G(x)=x^3+x^2+1=1101
M(x)*2^3=x^6+x^3=1001000
按模2除法:1001000 % 1101 --->商Q(x)=1111,余数R(x)=011
最后得到的CRC码为:M(x)*2^3+R(x)=1001011
若接收方收到的数据信息为x'=1101,加上校验码=1101011
按模2除法:1101011 % 1101 --->1000+001 继续将001补零做除法=0010 % 1101 -->商=01,余数=001 不过我还不会看第几位出错
答案:经过两次运算余数为001,所以是第二位出错,将左侧起第二位的取反即可,也可通过查表法快速定位出错位置。
3.中国大学MOOC计算机组成原理(计算部分)
1.十进制数5对应的32位IEEE754 格式的机器数为 ()H (采用十六进制表示,填写答案时不需要写最后的H)
5=101=1.01*2^2
S=0
E=2+127=129=10000001
M=01 00000000000000000
f=0100 0000 1010 0000 0000 0000 0000 0000=40A00000H
2.字长5位的待编码二进制有效数据为10011,对它进行CRC编码时采用的生成多项式代码为1011,则得到的编码结果为(填写二进制形式)
M(x)=10011
G(x)=1011
M(x)*2^3=10011000
按模2除法:10011000 % 1101 --->商Q(x)=10100,余数R(x)=100
最后得到的CRC码为:M(x)*2^3+R(x)=10011100
3.存放一个24*24点阵汉字,至少需要多少字节的存储空间 (只需要填写十进数)
24*24/8=72