程序是如何运行的 试卷一
1. CPU中不含有以下选项中的: C
A: 运算器
B: 寄存器
C: 内存
D: 时钟
2. CPU中负责计时的部件是:F
E: 程序计数寄存器
F: 时钟
G: 控制器
H: 靠人来计时
3. 对于汇编以下说法正确的是:J
I: 汇编需要编译成机器码
J: 汇编是助记符,和机器码一一对应
K: 汇编是给CPU看的
L: 编译器编译出来的是汇编
4. 以下哪个寄存器名是错的:D
A: 累加寄存器
B: 程序计数器
C: 标志寄存器
D: 控制寄存器
5. 以下哪个说法是错误的:C
A: 计算机能够执行分支是因为标志寄存器
B: 计算机能够执行循环是因为程序计数器
C: 控制器控制程序的分支及循环运行
D: 标志寄存器负责保存计算后结果的状态
6. 请写出二进制,八进制,十进制,十六进制(9之后使用字母顺序)
二进制 |
八进制 |
十进制 |
十六进制 |
00000000 |
0 |
0 |
0 |
00000001 |
1 |
1 |
1 |
00000010 |
2 |
2 |
2 |
00000011 |
3 |
3 |
3 |
00000100 |
4 |
4 |
4 |
00000101 |
5 |
5 |
5 |
00000110 |
6 |
6 |
6 |
00000111 |
7 |
7 |
7 |
00001000 |
10 |
8 |
8 |
00001001 |
11 |
9 |
9 |
00001010 |
12 |
10 |
A |
00001011 |
13 |
11 |
B |
00001100 |
14 |
12 |
C |
00001101 |
15 |
13 |
D |
00001110 |
16 |
14 |
E |
00001111 |
17 |
15 |
F |
00010000 |
20 |
16 |
10 |
00010001 |
21 |
17 |
11 |
00010010 |
22 |
18 |
12 |
00010011 |
23 |
19 |
13 |
注:书写规范:
八进制前面+0
如01 02 017
十六进制前面+0x
如0x00 0x0A
7. 请使用公式写出二进制数 011100001100000111000对应的十进制,需要解题步骤:
011100001100000111000=1*(2^3+2^4+2^5+2^11+2^12+2^17+2^18+2^19)
= 8+16+32+ 2048+4096+131072+262144+524288
=923704
注:更简单的算法:把二进制变为十六进制,再由十六进制转十进制!
0 1110 0001 1000 0011 1000
= E 1 8 3 8
= 14*16^4+1*16^3+8*16^2+3*16^1+8*16^0
=923704
8. 假设一个32位带符号(有负数)的二进制数 0111 0010 1110 1111 0011 1111 0000 1100,请写出对应的十进制数
0111 0010 1110 1111 0011 1111 0000 1100=2^2+2^3+2^8+2^9+2^10+2^11+2^12+2^13+2^16+2^17+2^18+2^19+2^21+2^22+2^23+2^25+2^28+2^29+2^30=192 828 1868
注:首位为0,为正数,简易算法同上题
9. 假设一个32位带符号(有负数)的二进制数 1111 0010 0010 1111 0011 0110 0000 1100,请写出对应的十进制数
反码:1000 1101 1101 0000 1100 1001 1111 0011
补码:1000 1101 1101 0000 1100 1001 1111 0100=-231786996
注:首位为1,为负数,首位后的二进制与上题一样,但是这不意味着就是上题答案加上负号就可以。
因为负数都是用补码表示的,在进行计算前要先将补码还原,即对补码取反加1(符号位除外)
如此得出的数值才是正确的
10. 假设二进制数(16位)0101 1111 0000 1111左移3位,结果是:
二进制:1111 1000 0111 1000
十进制:30840
十六进制:F 8 7 8
11. 假设二进制数(16位)0101 1111 0000 0000逻辑右移3位,结果是:
二进制:0000 1011 1110 0000
十进制:3040
十六进制:0 B E 0
注:逻辑右移:霸道型右移,空位直接补0
==>逻辑右移后可能会出现“负变正”的现象
12. 假设二进制数(16位)0101 1111 0000 0000算数右移3位,结果是:
二进制:0000 1011 1110 0000
十进制:3040
十六进制:0BE0
注:算术右移:温柔型右移,根据首位补0或1
==>本题体现不大,下题比较明显
13. 假设二进制数(16位)1101 1111 0000 0000算数右移3位,结果是:
二进制:1111 1011 1110 0000
十进制:-1056
十六进制:FBE0
注:首位为1,算术右移,空位根据首位补1
14. 请问以下代码输出的结果是 B
Int main()
{
Float sum = 0;
For( int I = 0; i< 100; i++)
{
Sum += 0.1;
}
Printf(“%f”,sum);
}
A: 10.0000000
B: 10.0000002
C: 不知道
D: 1.0000000
注:计算机累加浮点数,肯定会有偏差,但是偏差大小是不知道的,即它的结果是不确定(随机)的!(未定义操作)
15. 内存为什么有地址,我们是通过什么计算出内存的大小的?
便于管理内存中的数据,
内存大小=寻址大小(地址引脚的数量)*每次可读写的数据大小(数据引脚)
注:(我的理解)
1.内存的结构中包含有许多的引脚,引脚可分为:电源引脚,地址引脚,数据引脚,控制引脚
=>而内存中的内容的操作顺序是这样的:先通过地址引脚确定位置,再通过数据引脚对数据进行操作
=> 为了使程序员能够操作内存中的数据,有必要给每个数据一个确定的位置信息,使得我们可以直接找到它
=>因此,根据地址引脚的通电状态,给每一内存都赋予一个标记,这就是地址
2.内存大小=寻址大小(地址引脚的数量)*每次可读写的数据大小(数据引脚的多少)
16. 编程时读取和写入内存速度最快的数据结构是: A
A: 数组
B: 栈
C: 队列
D: 链表
17. 请说明下上一题中几种数据结构的优势
数组:整体取出一块内存,通过基址与变址可以快速读写数据,避免CPU繁重的计算
栈:便于记录和回溯
队列:先进先出
链表:方便数据的插入、删除等操作
注:数组:快速的读写
栈:便于记录查询、回溯,数据进出顺序是:先进后出
队列:顺序查询、顺序记录,数据的进出顺序:先进先出
链表:方便进行数据的插入、删除等操作
18. 程序是在内存中执行的:B
A: 对
B: 错
注:翻看第一节课的笔记,程序->CPU的过程中,exe是加载进内存进行执行的
19. 所有的数据都是一直(包括关机时)存储在:C
A: 内存
B: CPU
C: 硬盘
D: 我脑子里