第一章
1.程序从源程序到可执行程序需要经历的过程:预处理 编译 汇编 链接
2.运行程序时(即处理器读并运行在存储器中的命令),计算机需要执行的过程:输入命令开始到程序执行完为止。
3.计算机系统的硬件组成:外设(通过控制器与总线连接),主存,cpu(ALU,寄存器)。
4.存储器层次结构
5.虚拟存储器,虚拟地址空间结构图。虚拟存储器实质是一个字节数组。
第二章
1.几种数据类型,几种运算符,字节顺序。
2.字符串的表示方法:ASCII,UNICODE。字符流比字节流具有更强的平台独立性。
3.^(异或)的巧妙用法——交换两个变量的值,同时也可交换数组元素。一个运算性质:x^y=(x&~y) | (y&~x) ; ~y+y=-1
4.整数表示:无符号整数表示方法,有符号整数表示方法(采用补码表示)。
另:反码 原码的表示方法。
原码 反码 补码之间的关系:对于正数:原=反=补;对于负数:反=原各位取反;补=反最低位+1。
5.整数的扩展,截断方法。
6.有符号,无符号,较短类型,较长类型混合运算时如何转换。有符号—>无符号(c语言的表达式运算过程中,如果同时出现有符号和无符号,c语言会隐式转换为无符号计算); 短—>长(无符号短到无符号长需要在表示的开头加0,有符号短到有符号长需要在表示的前面加最高位数字); 有,短—>无,长:先长,后无。
尽量少用无符号数运算,避免无符号数和有符号数隐式转换带来的错误;如果避免不了,如使用size_t类型时,则与它计算的数值不能用有符号型的,且size_t和size_t之间最好不用算术运算,但是可以用关系运算。 (size_t即为unsigned int)
7.整数运算:溢出,逆元。溢出的判断——无符号整数加法溢出判断,有符号加法溢出判断,乘法溢出判断。
无符号,有符号整型的加,乘运算,溢出后的结果都可以通过mod(2^w)求得.详细的公式见课本.同时,如何检测是否溢出呢?
无符号加法: x+y = z, 如果z<x或y, 则表示溢出了.
有符号加法:如果x>0,y>0, z <0 或者x<0,y<0,且z>0.则表示溢出.
8.乘以常数:乘法变为加法,减法和移位。
除以2的幂次方(x/y), 可以化成向右移位(无符号数: 逻辑右移, 有符号数:算术右移) 注:无符号数的向右移动,正常移动即可; 有符号数的向右移动需要加上一个偏移量,然后再右移.(偏移量的计算方法: y = 2^k,则偏移量是k)
9.浮点数的表示方法(IEEE浮点数表示法),整数到浮点数的转换,舍入原则(因为有精度问题,所以才会有舍入原则),浮点数运算(浮点数加法和乘法都满足交换律和单调性,不满足结合律,eg,3.14+ 1e10 - 1e10 = 0, 但是3.14 + (1e10 - 1e10)= 3.14),int double float之间的转换。