数值的存储
- 数值在计算机中以1和0存储,任何值的运算,都是以位运算为基础进行的
位运算
- |(或):有1取1
- 0 | 0 = 0
- 0 | 1 = 1
- 1 | 0 = 1
- 1 | 1 = 1
- &(且):两者都为1取1
- 0 & 0 = 0
- 0 & 1 = 0
- 1 & 0 = 0
- 1 & 1 = 1
- ^ (异或):相同为0, 不同为1
- 0 ^ 0 = 0
- 0 ^ 1 = 1
- 1 ^ 0 = 1
- 1 ^ 1 = 0
- ~ (取反): 取相反值(注意,不是数学意义上的取相反值 ~10 不等于 -10)
- ~1 = 0
- ~0 = 1
- << (左移):高位丢弃,低位补0
- (右移):无符号数,高位补0,低位丢弃;有符号数,高位补上对应符号(正数补0, 负数补1)
基本运算
加法
- 以8位存储的 5 和 15为例:
0000 0101
0000 1111
- 步骤一:取得需要进位的数和不需要进位的数
- 进位数:0000 0101 & 0000 1111 = 0000 0101
- 不进位:0000 0101 ^ 0000 1111 = 0000 1010
- 步骤二:进位数右移一位,不进位数不动
- 进位数:0000 0101 << 1 = 0000 1010
- 不进位:0000 1010
- 步骤三:此时进位数和不进位数相加即为最终值,那么又回到了步骤一之前,重复步骤一、二,直到进位数为0
- 进位数:0000 0000
- 不进位:0001 0100
- 最终值即为不进位数 20
减法
- a - b = a + (-b),这看起来可能是个毫无意义的公式,但是它可以帮助我们将减法变为加法,统一加减法之后,机器底层只需要记住怎么做加法