2021-1-28深入了解计算机系统第2章个人总结

1.逻辑运算与部分性质:

位运算:
&: 逻辑AND, &00…可以通通置零, &11.可以用来保留指定位
|: 逻辑或 ,由于其只能由0|1和1|0得1的性质, 所以要想在0和非零数之间找到非零数, 用|即可
^: 逻辑异或,.感觉有点像&的补集
~: 逻辑非, 对于所有位, 0取1, 1取0, ~x+1=-x(阿贝群)

非位运算:
!: 类似~, 但是它不是针对位运算, 0取1, 非0取0
&&: 类似&, 但只有都是true才得到1, 否则得到0
||: 类似|, 但只要有一个或两个true那就能得到true

 

2.整数运算:

1.无符号数的编码和有符号数的编码(补码)的区别为最低位在无符号中依旧是2的幂, 而在有符号中则充当运算符的作用:(-1)^sign
2. 补码表示的范围不是对称分布的, 为-2 ^(k-1)到2 ^(k-1)-1, 原因为-1表示为11…11, 而0表示为00…00
3. 无论有无符号, 加法和乘法都会产生溢出, 解决的方法为x1 + x2 mod 2 ^k和x1 * x2 mod2 ^k
4. 乘以常常数的话, 对于2的指数大小, 通过适当的左移即可达成, 而乘以一般的常数我们可以把其的位以连续的1和0来进行分割, 1加0减如下

110001101,该数为397,假如计算5*397
则有:(5<<8)+(5<<7)+(5<<3)+(5<<2)+(5<<0)=5*397=1985

这样可以节省很多时钟周期
5.除法的话, 主要看了除以2的幂, 进行算术右移就行
6:算术右移和逻辑右移, 算术右移为带着符号位进行右移, 逻辑右移为单纯在低位补零, 我的记忆方式为逻辑上右移要与左移一样单纯补零, 但是为了算数争取则要进行符号位填充, 这样就能很好的区分两种右移了. 同时大多数语言中>>为算数右移
7.小端法: 把高字节放在低地址, 大端法:把高字节放在高地址

3.IEEE标准下的浮点数:

1.表达式V = ( -1 ) ^ s M * 2 ^ E
2.以阶码分为三大类, 格式化(阶码非全零全一), 非格式化(阶码全为零), 特殊值(无穷:阶码全为一小数域全为零, NaN:阶码全为一小数域非全为零)
3.格式化:f: 小数位, M=1+f, E=e - Bias=e-2 ^ (k-1) + 1, V=(-1) ^ s * 2 ^ (e-2 ^ (k-1) + 1)
(1 + f)
4.非格式化:f: 小数位, M=f, e:00…00, E=1 - Bias=2-2^(k-1), V=(-1) ^s *2 ^ (2-2 ^ (k -1))*f
5.浮点数转变为整数(仅代表个人总结): 现在最高位的1右侧放置小数点, 再数小数点后有多少位(fn), 之后用n减去该数得在最低位置多少个0, 再用fn加上Bias, 置于最高位即可

一些碎碎念:

    本来1月28日立的博客, 其实2月2号就看完了, 硬是拖到7号才开始写, 中间一度产生了二进制无法表示所有整数的想法, 懒狗去死罢(划掉)

Guess you like

Origin blog.csdn.net/eeeeeight/article/details/113339719