深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案

第二章信息的表示和处理

1.深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第1张图片
这道题一定不要偷懒啊,我做这题的时候就是第一位1,第二位2,第三位4,第四位8,然后累加。

2.这道题可以找规律可以推导出公式
最高位 2 n % 4 2^{n\%4} 2n%4,然后后面跟 n / 4 n/4 n/4 个0
推导就是每次进1位需要 2 4 2^4 24,然后递推总结出公式
3

# include
int main()
{
    int a[10];
    int i=0;
    while(scanf("%d",&a[i]))
    {
        printf("%d==0x%x\n",a[i],a[i]);
    }
    return 0;
}

10进制和16进制转换较为麻烦可以用c语言写一个程序进行转换

4 按照10进制的做法满16进1,计算即可
5 根据大端法和小端法原理写出即可
在这里插入图片描述
6.
深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第2张图片
我们可以做出推测,就是由于浮点数和整数的存储方式不同导致了精度问题,浮点数能够表示的范围大,但是容易引发精度问题。
7
61 62 63 64 65 66(不会输出00,因为strlen计算的是到’\0’停止计算的字符数目)
8.
在这里插入图片描述
按照计算法则计算即可。
9.
深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第3张图片
10.
深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第4张图片
根据异或能够交换结合的特性化简
11. (1)first和last 都为k+1
(2) 这样传入的是同一个数,所以异或后的结果是0
(3)可以在swap函数中加一个判断,如果两数相等则不进行交换
12. 什么是掩码?
深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第5张图片
13.第一个空: b i s ( x , y ) bis(x,y) bis(x,y)
直接用bis就是|操作
第二个空: b i s ( b i c ( x , y ) , b i c ( x , y ) ) bis(bic(x,y),bic(x,y)) bis(bic(x,y),bic(x,y))
将y中为1,x中也为1的清0,得到一个仅在x中出现过1的数字;
同理操作得到仅在y中出现过一次的数字,然后bis。
14.深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第6张图片
15.判断是否x^y=0即可
16注意算数和逻辑的细微差别,这涉及到后面补码的知识,看不懂的先学完后面再来看。
深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第7张图片
17书中解释非常详细
深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第8张图片
18深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第9张图片
注意最高位是否是1,然后根据补码的原则算出来即可。
19
深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第10张图片
跟上题同理
20 运用推导出的公式求解即可
21深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第11张图片
2 32 = 4294967296 2^{32}=4 294 967 296 232=4294967296
(1)先在有符号的情况下-1,然后隐式转换为无符号数,在无符号的情况下进行对比,两数相等。都为(01…)
(2)直接在有符号的情况下对比
(3)先强转为无符号,减一后,大小比后面的大;
(4)直接对比
(5)最后都是无符号数,前者减了1,所以等式成立
22
跟在正文博客中的证明方法是一样的
23深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第12张图片
此题用于理清逻辑右移和算数右移。
24深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第13张图片
先取模,然后判断是否使用公式。
25 当length == 0的时候会引发致命的错误,因为length会变成全为1的unsigned数。方法是不让length-1,或者把length改为int类型。

26深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第14张图片
27 根据无符号数加法原则:return x+y>=x;
28深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第15张图片
十进制和16进制的转换
29
深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第16张图片
就是把第5位之前的删去得到的值就是所求答案
30深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第17张图片
这里发现了一个有趣的性质,两个负数相加为正数的情况就是权值最高的位数相加后不会进1。
31 补码本质上一种取模运算,而取模运算满足结合律,可以将(x+y)-x
变为(x-x)+y;
32 这里涉及到补码怎么变为相反数的问题,所有位全部取反后再加1。
这里可以给出证明,当一个数是负数时,我们可以看成其他位为0的位的值的和-1,就是负数的值,而变为正数后,其他为0的位变为1,也就是为1的位的值得和+1就位正数的值。
同理,而当一个数为正数时,值可以看成为1的数的和,而负数则是为0的数的和-1,当正数取反后,所有1变成0,得到的数为正数取反-1.
所以就会出现一个问题当一个数除负数位之外的其他位全为0的时候变为相反数时还会是眼来的负数。
所以此题就会出现问题,当x为负数的时候出现溢出现象,实际上是没有溢出的。
33 跟上题证明相同,取非就是所有位取反+1
深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第18张图片
34 深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第19张图片
35
深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第20张图片
建议直接看书中的证明
36 分别用long long 和 int记录两个数的和,比一下两数是否相等即可。
37malloc最多只能分配size_t,就算提高了a_size的精度,还是开不出这么大的字节,所以解决方法就是开不出这么大的字节时直接返回空就行了。
深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第21张图片
38
在这里插入图片描述

39在这里插入图片描述
40
深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第22张图片
注意运用39题的结论,对连续1进行转化
41深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第23张图片
书中证明非常好理解
42
在这里插入图片描述
如果左侧为负数,则全为1,&0xf则等于15,正好就是偏移量,如果为正数为0,没必要增加偏移量。
43 31 8
44深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第24张图片
学完前面的前置知识后发现这些题非常简单。
F: 补码转变为无符号数的时候是直接转变过去的,两者进行加法的时候运算行为是相同的。
G:根据前面学过的知识取反等于~y=-y-1,然后与无符号数进行加法 x ∗ ( − y − 1 ) x*{(-y-1)} x(y1),转变为无符号数进行运算,位级行为相同等式成立。
45深入理解计算机系统(csapp) 第二章信息的表示和处理练习题答案_第25张图片
46
在这里插入图片描述
在这里插入图片描述

你可能感兴趣的:(c语言,操作系统,计算机组成原理)