cpu
1. cpu是寄存器的合体,当然除了寄存器还有其他的控制器,计算器,时钟,这不讨论,寄存器有多种类型 :【累加寄存器,程序计数器,标志寄存器,基址寄存器,变址寄存器,通用寄存器】等
2. 其中程序计数器控制着下一步执行的指令的地址,分支和循环计数器跟着做调整,标志寄存器存储着计算的结果,如判断两个值大小,则相减看结果和0比较。
3. 函数调用中起作用的call指令和return指令,call指令调用函数的同时把接下来要执行的代码地址存到内存栈中。return指令,从栈中取出地址继续执行。
4. 数组通过基址寄存器和变址寄存器来实现的。
5. cup处理的工作其实还是很简单的;【数据转送指令,运算指令,跳转指令,call/return 指令】
二进制
1. 原因:和计算机处理信息的机制最相似,cpu用IC 集成电路,IC中的触角只能解析OV 和5V
2. 二进制基数是2 不同位有不同的位权,从2的0次方开始;
3. 仅适用于二进制的移位运算,例如a=39 a<<2 先将39转为二进制,再向左移两位,空出来的补位 0,如果向右移,,正数前面全补0 ,负数全补1。 扩充字节数也是一样的道理,例如 8位转16位 10001100----》1111111110001100
4. 补数是 正数取反+1 ,和正数加起来溢出取8位得到0。计算机不做减法,都是加上负数。
小数运算为什么会出错
1. C语言中将0.1加100次得不到10 ,为什么呢?这是因为计算机运算的时候都会转化为二进制执行,0.1对应没有二进制的值,只有无限接近的。
2. 二进制 ---十进制 0.1= 1*2的-1次方等于二分之一0.5
0.01=2的-2次方 0.25类推后面的是0.125 0.065
3. 解决:1.允许一定返回的偏差 2.转化位正数运算完,再除以相应的值
4. 有个浮点数的公式 基数指数 符号什么的
内存
1. 内存中的一个IC
![这里写图片描述](https://img-blog.csdn.net/20170214223123898?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2VsbHlmdW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2. 内存的逻辑模型是楼房,由一个一个字节堆成的
3. 简单的指针,定义指针时给的类型是为了告诉指针,要取的内存地址多大位一个单元,刚刚的楼房是一层一个单元,数据类型不同了,可能是多层一个单元。
4. 数组是高效使用内存的基础。
5. 栈实和队列都可以通过不指定内存地址和索引来操作数组,区别在于栈属于FILO 队列是FIFO,环形缓冲区是队列的首尾接在一起
6. 链表使元素追加删除更容易,因为下一个元素是由上一个元素里的地址觉定的,加一个,只用改一个地址,其他不用动。不耗费时间
7. 二叉树查找是的数据搜索更有效
内存和磁盘之亲密关系
- 程序需要读入内存后才能运行
- 磁盘缓存 是在内存中开辟一块地方,放从磁盘中拿到的程序,(频繁调用那部分),可以提高速度
- 虚拟内存指的是把 磁盘的一部分拿出来做内存使用,用于内存不够的时候,页文件指的是从把文件划分多个页,内存和虚拟内存交换页来执行
- 磁盘的物理结构是由扇区构成的,磁盘的读写是根据扇区的最小单位的整数倍(簇)来进行的,1簇可以使1个扇区512B 或者是1KB等等,所以,建一个文件最少占用512B