第一部分:Bits、Bytes、Integers
- 本部分了解数字的位级表示、操作数字时对数字其他属性的影响、溢出时我们不能做和期望电脑做的事情。
笔记1:二进制表示浮点数的核心思想:小数点右边的数。权重依次为2的-1次方、-2次、-3。。。
笔记2:对一个非零数运用两次!,会得到1
笔记3:左移都是右边补0,右移则分两种,为什么呢?
因为底层表示为补码,最高位为1,表示负数,为0表示正数,因此如果最高位为1,右移也需要补1,才能确保正确除2
笔记4:如果一个单字节数x左移8,将得到0吗?不,是x,因为实际上为模8。只要观察低位的3个bit位移,忽略所有其他位,所以这就像模8一样
(解释:C语言规定移位指令只需要考虑移位量的低 log2(数据类型长度),相当于:实际位移量mod数据类型长度,即8mod8=0 所以这里的实际位移量为零,等于原数X)
1.1 关于整数编码:无符号数和补码
注:B2U的意思是从比特位模式转化成无符号数的编码表示
思想:将加权位求和,每个比特用2的幂来加权
以下为无符号数和二进制补码的公式(当我们看补码的时候,和无符号数唯一的区别就是这种方法可以表示负数和正数):