数据表示和位运算
2019-12-03 本文已影响0人
冷月成双
原码
:
原码表示法中,最高位为符号位,0表示正号,1表示负号,其余的 n-1 位表示数值的绝对值.
# 机器字长为8
#0的原码有两种表现形式.
+0(原) = 0 0000000
-0(原) = 1 0000000
+1(原) = 0 0000001
-1(原) = 1 0000001
反码
:
反码表示法中,最高位为符号位,0表示正号,1表示负号,正数的反码与原码相同,负数的反码则是其绝对值按位求反.
# 机器字长为8
#0的反码有两种表现形式.
+0(反) = 0 0000000
-0(反) = 1 1111111
+1(反) = 0 0000001
-1(反) = 1 1111110
补码
:
补码表示法中,最高位为符号位,0表示正号,1表示负号,正数的补码与其原码和反码相同,负数的补码则等于其反码
末位加1
# 机器字长为8
#0的补码只有1种表现形式.
+0(补) = 0 0000000
-0(补) = 0 0000000
+1(补) = 0 0000001
-1(补) = 1 1111111
位移运算
左移运算 : <<
8 << 2 = 32
0000 0000 00000 0000 0000 0000 0000 1000
向左移2位后
00 0000 00000 0000 0000 0000 0000 1000 00
对比上面,去掉最高的2位,在最低位后面补上2个0 得到 32
可以看到
右移运算 : >>
-8 >> 2 = -2
-
原码 : 1000 0000 0000 0000 0000 0000 0000 1000
反码 : 1111 1111 1111 1111 1111 1111 1111 0111
补码 : 1111 1111 1111 1111 1111 1111 1111 1000
-
补码向右位移2位,高位补1,低位舍掉
补码 : 11 1111 1111 1111 1111 1111 1111 1111 10
-
补码还原到原码
保留符号位然后取反,然后加1就得到原码
10 0000 0000 00000 0000 0000 0000 0000 10
-
所以
-8 >> 2
相当于
位运算
运算符 | 含义 | 功能 |
---|---|---|
& | 按位与 | 两个为1,结果为1;否则为0。 |
| | 按位或 | 两个只要有一个为1,结果为1。 |
∧ | 按位异或 | 两个同号结果为0(假)异号则结果为1(真) |
~ | 取反 | 按位取反,即将0变1,将1变0。 |