《C Primer Plus》第15章复习题与编程练习

《C Primer Plus》第15章复习题与编程练习

  • 复习题
    • 1. 将下列十进制数转换为二进制形式:
    • 2. 将下列二进制值转换为十进制、八进制和十六进制形式:
    • 3. 计算下列表达式;假设每个值为8位:
    • 4. 计算下列表达式;假设每个值为8位:
    • 5. 因为ASCII码仅使用最后的7位,所以有时需要屏蔽掉其他位。相应的二进制掩码是什么?分别以十进制、八进制和十六进制形式如何表示这个掩码?
    • 6. 在程序清单15.2中,可以做以下替换,把:
    • 7. 考虑下面的程序段:

复习题

1. 将下列十进制数转换为二进制形式:

a. 3
b. 13
c. 59
d. 119

答:

a. 11
b. 1101
c. 111011
d. 1110111

2. 将下列二进制值转换为十进制、八进制和十六进制形式:

a. 00010101
b. 01010101
c. 01001100
d. 10011101

答:

a. 21, 025, 0x15
b. 85, 0125, 0x55
c. 76, 0114, 0x4C
d. 157, 0235, 0x9D

3. 计算下列表达式;假设每个值为8位:

a. ~ 3
b. 3 & 6
c. 3 | 6
d. 1 | 6
e. 3 ^ 6
f. 7 >> 1
g. 7 << 2

答:

a. 252
d. 2
c. 7
d. 7
e. 5
f. 3
g. 28

4. 计算下列表达式;假设每个值为8位:

a. ~ 0
b. !0
c. 2 & 4
d. 2 && 4
e. 2 | 4
f.2 || 4
g. 5 << 3

答:

a. 255
b. 1
c. 0
d. 1
e. 6
f. 1
g. 40

5. 因为ASCII码仅使用最后的7位,所以有时需要屏蔽掉其他位。相应的二进制掩码是什么?分别以十进制、八进制和十六进制形式如何表示这个掩码?

答:掩码在二进制中为1111111。它的十进制表示为127,八进制表示为0177,十六进制表示为0x7F。

6. 在程序清单15.2中,可以做以下替换,把:

while(bits-- > 0)
{
    mask |= bitval;
    bitval <<= 1;
}

用:

while(bits-- > 0)
{
    mask |= bitval;
    bitval *= 2;
}

替换,而程序仍将工作。这是否意味着*= 2等同于<<= 1?|=和+=又怎样?

答:
bitval *= 2和bitval << 1都把bitval的当前值加倍,所以他们是等效的。但是mask += bitval和mask |= bitval只有在bitval和mask没有同时设置为打开的位时才具有相同的效果。例如,2 | 4 = 6,但是3 | 6 = 7。

7. 考虑下面的程序段:

a. Tinkerbell计算机有一个硬件字节,可以将该字节读入程序。该字节包括下列信息:

含义
0~1 1.4MB软盘驱动器数量
2 未使用
3~4 CD-ROM驱动器数量
5 未使用
6~7 硬盘驱动器数量

Tinkerbell和IBM PC一样从右到左填充结构位字段。创建一个适于存放该信息的位字段模板。

b. Klinkerbell与Tinkerbell类似,但它从左到右填充结构。请为Klinkerbell创建相应的位字段模板。

答:
a.

struct tinkerbell {
    unsigned int diskdrivers   : 2;
    unsigned int                    : 1;
    unsigned int cdromdrivers: 2;
    unsigned int                    : 1;
    unsigned int harddrivers  : 2;
};

b.

struct klinkerbell {
    unsigned int harddrivers  : 2;
    unsigned int                    : 1;
    unsigned int cdromdrivers: 2;
    unsigned int                    : 1;
    unsigned int diskdrivers   : 2;
};

你可能感兴趣的:(C,Primer,Plus,c语言,C,Primer,Plus)