1.十进制、二进制、十六进制。
太基础。。。
2.整数:无符号数、有符号数(补码)先说有符号数,反码原码和补码。
原码的道理很简单,一个数字编码的最高位是符号位,不记录数字的绝对值大小,用0表示正,1表示负。
反码,当这个有符号数x是正(即符号位是0)的时候,x的反码就是它本身;x为负,那么除了符号位是不变的(表示负数的1),其他都按位取反。不过貌似这个反码用处也不大,因为0既是正数又是负数,0表达不唯一;而且符号位是不能参与算数运算的,比较恶心。
补码
有符号数x若为正那么补码等于原码,否则除了符号位仍是表示负数的1不变外,数值位全部取反,最后再将这个各个位取反后得到的数(不包括符号位)数值+1得到新的一个数的二进制表示。。。这样算出来的0就具有类唯一性,而且可以直接运算。
小技巧:一个数的补码的补码就是这个数的原码。
Tips:两个有符号数相加得到的结果x,x编码符号位a和编码数值位的第一位(即编码的次高位)b,如果有axor b=1(即ab不相同),那么结果溢出,否则不溢出。
无符号数相加溢出后得到的值是元结果对于表示上限(比如4位长度的上限是16)进行取模的结果。
3.浮点数:形式;编码、求值、舍入
数据类型 | 32位系统 | 64位系统 |
---|---|---|
char | 1字节(8位) | 1字节(8位) |
shortint | 2字节(16位) | 2字节(16位) |
int | 4字节(32位) | 4字节(32位) |
longint | 4字节(32位) | 8字节(64位) |
longlong int | 8字节(64位) | 8字节(64位) |
char* | 4字节(32位) | 8字节(64位) |
float | 4字节(32位) | 4字节(32位) |
double | 8字节(64位) | 8字节(64位) |
6.补码的不对称;正负;求整数负值的补码
7.整数运算;有无符号混合、比较、除法舍入、逻辑 /算数右移- 补码加法就是把数字转成补码,然后执行加法(最普通的,逢2进1)最后把溢出的最高位舍去。
- 补码减法就是把减数取成相反数,转补码,执行加法。
说一下逻辑和算数位移。
逻辑右移x>>k会舍掉编码最后k位,将前面的n-k位移动到末端,再在左端所有空位补上0.
但是算数右移会在左端所有空位补齐之前有效最高位的值
比如x=10010010B
x>>4(逻辑)的结果是x>>4=00001001B
x>>4(算数)的结果是x>>4=11111001B
但是比较不给力的是C语言没有明确规定用哪种右移方法,对于无符号数必须是逻辑右移,有符号数逻辑或者算数都行。
ps:位移运算符优先级并不高,比+——要低一些
-
:程序的机器级表示
-
寄存器及其默认用法
-
栈帧结构:过程调用时的参数传递、返回地址
-
返回时leave指令;栈帧变化
-
Leal指令
-
引起缓冲区溢出的函数
-
数组访问:由汇编代码得到数组列数
-
结构体和联合体:
对齐;嵌套;各字段偏移量
-
Switch语句:跳转表
-
指针运算的缩放
-
:优化程序性能
-
会利用数据流图中的关键路径分析程序性能
-
掌握并提高并行性的方法:
循环展开,多个累计变量,重新结合变换
-
使用条件传送
-
写/读相关对程序性能的影响
-
:存储器层次结构
-
高速缓存结构、访问、命中
-
:链接
-
全局、本地符号的概念
-
Static
-
强弱符号
-
重定位
第八章:异常控制流
-
信号处理方式:分析可能的输出
-
几个特殊函数
-
进程控制:fork,wait,画图分析可能的输出
-
:虚拟存储器
动态存储器分配中的概念:
碎片,放置、合并策略,垃圾收集
地址翻译;多级页表