深入理解计算机系统答案 超高清电子版
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Computer Systems: A Programmer’s Perspective Instructor’s Solution Manual 1
Randal E. Bryant David R. O’Hallaron
December 4, 2003
1Copyright c 2003, R. E. Bryant, D. R. O’Hallaron. All rights reserved.
8}
code/data/show-ans.c
Problem 2.42 Solution: This is a simple exercise in masking and bit manipulation. It is important to mention that ˜0xFF is a way to generate a mask that selects all but the least significant byte that works for any word size. (x & 0xFF) | (y & ˜0xFF)
code/data/show-ans.c
1 int is_little_endian(void)
2{
3
/* MSB = 0, LSB = 1 */
4
int x = 1;
5
6
/* Return MSB when big-endian, LSB when little-endian */
7
return (int) (* (char *) &x);
This document gives the solutions to the homework problems.
1.1 Chapter 1: A Tour of Computer Systems
1.2 Chapter 2: Representing and Manipulating Information
4}
5
6 void show_long(long int x)
7{
8
show_bytes((byte_pointer) &x, sizeof(long));
9}
code/data/show-ans.c
1
2
CHAPTER 1. SOLUTIONS TO HOMEWORK PROBLEMS
10
11 void show_double(double x)
2
Chapter 1
Solutions to Homework Problems
The text uses two different kinds of exercises:
Practice Problems. These are problems that are incorporated directly into the text, with explanatory solutions at the end of each chapter. Our intention is that students will work on these problems as they read the book. Each one highlights some particular concept.
A. !!x B. !!˜x C. !!(x & 0xFF) D. !!(˜x & 0xFF)
Problem 2.44 Solution:
12 {
13
show_bytes((byte_pointer) &x, sizeof(double));
14 }
code/dΒιβλιοθήκη Baiduta/show-ans.c
Problem 2.41 Solution: There are many ways to solve this problem. The basic idea is to create some multibyte datum with different values for the most and least-significant bytes. We then read byte 0 and determine which byte it is. In the following solution is to create an int with value 1. We then access its first byte and convert it to an int. This byte will equal 0 on a big-endian machine and 1 on a little-endian machine.
Problem 2.43 Solution: These exercises require thinking about the logical operation ! in a nontraditional way. Normally we think of it as logical negation. More generally, it detects whether there is any nonzero bit in a word.
Problem 2.40 Solution: This exercise should be a straightforward variation on the existing code.
1 void show_short(short int x)
2{
3
show_bytes((byte_pointer) &x, sizeof(short int));
Homework Problems. These are found at the end of each chapter. They vary in complexity from simple drills to multi-week labs and are designed for instructors to give as assignments or to use as recitation examples.
Randal E. Bryant David R. O’Hallaron
December 4, 2003
1Copyright c 2003, R. E. Bryant, D. R. O’Hallaron. All rights reserved.
8}
code/data/show-ans.c
Problem 2.42 Solution: This is a simple exercise in masking and bit manipulation. It is important to mention that ˜0xFF is a way to generate a mask that selects all but the least significant byte that works for any word size. (x & 0xFF) | (y & ˜0xFF)
code/data/show-ans.c
1 int is_little_endian(void)
2{
3
/* MSB = 0, LSB = 1 */
4
int x = 1;
5
6
/* Return MSB when big-endian, LSB when little-endian */
7
return (int) (* (char *) &x);
This document gives the solutions to the homework problems.
1.1 Chapter 1: A Tour of Computer Systems
1.2 Chapter 2: Representing and Manipulating Information
4}
5
6 void show_long(long int x)
7{
8
show_bytes((byte_pointer) &x, sizeof(long));
9}
code/data/show-ans.c
1
2
CHAPTER 1. SOLUTIONS TO HOMEWORK PROBLEMS
10
11 void show_double(double x)
2
Chapter 1
Solutions to Homework Problems
The text uses two different kinds of exercises:
Practice Problems. These are problems that are incorporated directly into the text, with explanatory solutions at the end of each chapter. Our intention is that students will work on these problems as they read the book. Each one highlights some particular concept.
A. !!x B. !!˜x C. !!(x & 0xFF) D. !!(˜x & 0xFF)
Problem 2.44 Solution:
12 {
13
show_bytes((byte_pointer) &x, sizeof(double));
14 }
code/dΒιβλιοθήκη Baiduta/show-ans.c
Problem 2.41 Solution: There are many ways to solve this problem. The basic idea is to create some multibyte datum with different values for the most and least-significant bytes. We then read byte 0 and determine which byte it is. In the following solution is to create an int with value 1. We then access its first byte and convert it to an int. This byte will equal 0 on a big-endian machine and 1 on a little-endian machine.
Problem 2.43 Solution: These exercises require thinking about the logical operation ! in a nontraditional way. Normally we think of it as logical negation. More generally, it detects whether there is any nonzero bit in a word.
Problem 2.40 Solution: This exercise should be a straightforward variation on the existing code.
1 void show_short(short int x)
2{
3
show_bytes((byte_pointer) &x, sizeof(short int));
Homework Problems. These are found at the end of each chapter. They vary in complexity from simple drills to multi-week labs and are designed for instructors to give as assignments or to use as recitation examples.