CPU如何进行数学运算
- 位运算
- 与或非
- 按位与
- 按位或
- 按位取反
- 位移
- 左移
- 右移
- 算术位移与逻辑位移
- 与或非
- 四则运算
- 加
- 减
- 乘
- 除
位运算
与或非
按位与
符号: & 示例:
1(10进制) = 0000 0001 (2进制) 9(10进制) = 0000 1001 (2进制) 1 & 9 = 0000 0001 (2进制) = 1 (10进制)
计算遵守:都为真则真, 除此之外为假
按位或
符号:| 示例:
5(10进制) = 0000 0101 (2进制) 8(10进制) = 0000 1000 (2进制) 5 | 8 = 0000 1101 (2进制) = 13 (10进制)
计算遵守:只有要一个是真结果就是真, 都为假才假
按位取反
符号:~ 示例:
5(10进制) = 0000 0101 (2进制) ~5 = 1111 1010 (2进制) = -6 (10进制)
计算遵守:真变假,假变真
PS:二进制负数的计算是
0 = 0000 0000 0 - 1 = -1 = 1111 1111 -1 - 1 = -2 = 1111 1110 -2 - 1 = -3 = 1111 1101 -3 - 1 = -4 = 1111 1100 -4 - 1 = -5 = 1111 1011 -5 - 1 = -6 = 1111 1010
位移
左移
符号:<< 运算:直接将数据向左移动一位,并补零
1 (10进制) = 0000 0001 (2进制) 1 << 1 = 0000 0010 (2进制) = 2 1 << 3 = 0000 1000 (2进制) = 8
右移
符号:>> 运算:直接将数据向左右动一位,并补零
9 (10进制) = 0000 1001 (2进制) 9 >> 1 = 0000 0100 (2进制) = 4 9 << 3 = 0000 0001 (2进制) = 1
算术位移与逻辑位移
位移包括算术位移和逻辑位移两种情况。逻辑位移是指位移过后直接补零。
算术位移是指在保持符号位不变的情况下进行的位移。
例如:
-6 (10进制) = 1111 1010 (2进制) -6 >> 1 = 1111 1101 (2进制) = -3 -6 >> 2 = 1111 1110 (2进制) = -1
对于 -6 而言最高位 1 是负数标识的符号位,在进行位移的时候该符号位会保持不变,这种位移叫做算术位移。而不论如何位移过后都补零的情况测试逻辑位移