第一章

练习1.1

image-20240721195623781

image-20240912100811929

  • 解答A
    • 根据公式和公式的具体含义
    • 其中α:程序中可并行化的部分所占比例(在这里指的是可以提速到150公里/小时的路段,该路段占总路段的比例)
    • k:并行部分的加速倍数(即加速到150公里每小时这个速度是原速的多少倍)
    • 最后再计算得到S的值
image-20240912100910380 image-20240912101056678 image-20240912101231538
  • 解答B
    • 根据上文取消限速的说法,得知α=0.6
    • 题目要求S = 1.67
    • 可以得到一个方程,解出方程中k的值,再根据k的定义就可以求得加速后的速度

image-20240912103009867

image-20240912103053591

练习1.2

image-20240721195647421

  • 解答:
    • 问题是求k,已知α=0.8,S=2,可列方程,解出k

image-20240912103436632

第二章

练习2.1

image-20240912090459427

1
2
3
4
5
6
7
8
9
10
11
12
A: 0x39A7F8
0011 1001 1010 0111 1111 1000

B: 1100 1001 0111 1011
0xC97B

C: 0xD5E4C
1011 0101 1110 0100 1100
//订正:1101 0101 1110 0100 1100

D: 0010 0110 1110 0111 1011 0101
0x26E7B5

练习2.2

image-20240912090517519

n 2^n(十进制) 2^n(十六进制)
9 512 0x200
19 524288 0x80000
14 16384 0x4000
16 65,536 0x10000
17 131,072 0x20000
5 32 0x20
7 128 0x80

练习2.3

image-20240912090535508

十进制 二进制 十六进制
0 0000 0000 0x00
167 1010 0111 0xA7
62 0011 1110 0x3E
188 1011 1100 0xBC
55 0011 0111 0x37
136 1000 1000 0x88
243 1111 0011 0xF3
82 0101 0010 0x52
172 1010 1100 0xAC
231 1110 0111 0xE7

练习2.4

image-20240912090548686

1
2
3
4
A: 0x5044
B: 0x4FFC
c: 0x507C
D: 0xAE

练习2.5

image-20240912090615698

1
2
小端法:A.0x21 B.0x43 C.0x65
大端法:A.0x87 B.0x65 C.0x43

练习2.6*

image-20240912090630134

1
2
3
0x00359141的二进制值为:0000 0000 0011 0101 1001 0001 0100 0001
0x4A564504的二进制值为: 0100 1010 0101 0110 0100 0101 0000 0100
等学到浮点数表示的时候再来解决这个

练习2.7

image-20240912090646739

1
输出结果:0x61 0x62 0x63 0x64 0x65 0x66

练习2.8

image-20240912090709742

运算 结果
a [01101001]
b [01010101]
~a 10010110
~b 10101010
a&b 01000001
a|b 01111101
a^b 00111100

练习2.9

image-20240917165848581

1
2
3
4
5
6
7
8
9
A:
黑色的补是白色
蓝色的补是黄色
绿色的补是红紫色
蓝色的补是红色
B:
蓝色:001 绿色:010 结果:蓝绿色011
黄色:110 绿色:011 结果:绿色010
红色:100 红紫色:101 结果:蓝色001

练习2.10

image-20240917165902352

步骤 *x *y
初始 a b
第1步 a a^b
第2步 a^(a^b)=(a^a)^b=b a^b
第3步 b b^(a^b)=(b^b)^a=a

练习2.11

image-20240917165914896

  • 程序编写如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<stdio.h>
void reverse_array(int a[], int cnt);
void inplace_swap(int* x, int* y);
int main() {
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int b[11] = { 1,2,3,4,5,6,7,8,9,10,11 };
reverse_array(a, 10);
reverse_array(b, 11);
for (int i = 0; i < 10; i++)
printf("%d ", a[i]);
printf("\n");
for (int i = 0; i < 11; i++)
printf("%d ", b[i]);
}

void reverse_array(int a[], int cnt)
{
int first, last;
for (first = 0, last = cnt - 1; first <= last; first++, last--)
inplace_swap(&a[first], &a[last]);
}

void inplace_swap(int* x, int* y)
{
*y = *x ^ *y;
*x = *x ^ *y;
*y = *x ^ *y;
}
  • 回答问题如下:
1
2
3
A.奇数时,最后一次的fist和last的值都为k
B.因为fist和last的值都为k,所以调用的都是a[k]这个值,而相同的值异或,结果会得到0
C.将测试条件修改为 first<last

练习2.12

image-20240917165925277

  • 回答
1
2
3
A. x = x&&0x000000FF
B. x^~0xff//这里注意一下异或的性质,与全0异或即为本身,与全1异或即为求反
C. x|0xff

练习2.13

image-20240917165938679

  • 题目简单介绍:即用bis和bic实现与和或的运算
1
2
3
4
//第一个
int reasult = bis(x,y);
//第二个
int reasult = bis(bic(x,y),bic(y,x));

练习2.14

image-20240918200200471

练习2.15

image-20240918200207813

练习2.16

image-20240918200218120

练习2.17

image-20240918200249563

练习2.18

image-20240918200303124

练习2.19

image-20241017003225637

练习2.20

image-20241017003241864

练习2.21

image-20241017003302874

练习2.22

image-20241017003335379

练习2.23

image-20241017003347210

练习2.45

image-20241017210524261

练习2.46

image-20241017210541566

练习2.47

image-20241017225815537