位运算与位移运算
原码、反码和补码
原码
将一个数用二进制表示出来,该二进制码称为原码,其中最高位表示符号,0为正,1为负。
反码
补码
- 正数的补码:与原码相同。
- 负数的补码:将反码+1 。
计算机中的运算都是使用补码。
0的原码、反码和补码都是0。
正数的原码、反码和补码都相同。
例子
数据 | 原码 | 反码 | 补码 |
---|
14 | 00001110 | 00001110 | 00001110 |
-14 | 10001110 | 11110001 | 11110010 |
位运算
位运算符
运算符 | 符号表示 | 字母表示 | 规则 |
---|
按位与 | & | And | 两位全为1,结果为1。 |
按位或 | | | Or | 两位全为0,结果为0。 |
按位异或 | ^ | Xor | 一个为0,一个为1,结果为1。 |
按位非 | ~ | Not | 1为0,0为1。 |
练习题
步骤 | 码 | 说明 |
---|
2的原码 | 00000010 | |
2的反码 | 00000010 | |
2的补码 | 00000010 | |
~2 | 11111101 | 该码为补码,且最高位是1,表示负。 |
转化为反码 | 11111100 | 该码为反码。 |
转化为原码 | 10000011 | 该码是原码,结果是-3。 |
步骤 | 码 | 说明 |
---|
-5的原码 | 10000101 | |
-5的反码 | 11111010 | |
-5的补码 | 11111011 | |
~-5 | 00000100 | 该码为补码,且最高位是0,表示正。 |
转化为反码 | 00000100 | 该码为反码。 |
转化为原码 | 00000100 | 该码是原码,结果是4。 |
步骤 | 码 | 说明 |
---|
-3原码 | 10000011 | |
-3的反码 | 11111100 | |
-3的补码 | 11111101 | |
3的原码 | 00000011 | |
3的反码 | 00000011 | |
3的补码 | 00000011 | |
-3^3 | 11111110 | 该码为补码,最高位是1,表示负。 |
转化为反码 | 11111101 | 该码为反码。 |
转化为原码 | 10000010 | 该码是原码,结果是-2。 |
位移运算
规则
- 右移(»):符号位固定,用符号位填充空缺的高位。
- 左移(«):符号位固定,用0填充空缺的低位。
练习
步骤 | 码 | 说明 |
---|
1的原码 | 00000001 | |
1的反码 | 00000001 | |
1的补码 | 00000001 | |
1»2 | 00000000 | 该码为补码,最高位是0,表示正。 |
转化为反码 | 00000000 | 该码为反码。 |
转化为原码 | 00000000 | 该码是原码,结果是0。 |
步骤 | 码 | 说明 |
---|
-11的原码 | 10001011 | |
-11的反码 | 11110100 | |
-11的补码 | 11110101 | |
-11«2 | 11010100 | 该码为补码,最高位是1,表示负。 |
转化为反码 | 11010011 | 该码为反码。 |
转化为原码 | 10101100 | 该码是原码,结果是-44。 |