数据表示和位运算

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 

可以看到
32 = 8 * 2^{2}

右移运算 : >>

-8 >> 2 = -2

  1. 原码 : 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. 补码向右位移2位,高位补1,低位舍掉

    补码 : 11 1111 1111 1111 1111 1111 1111 1111 10

  3. 补码还原到原码

    保留符号位然后取反,然后加1就得到原码

    10 0000 0000 00000 0000 0000 0000 0000 10

  4. 所以-8 >> 2 相当于
    -8/(2^2) = -2

位运算

运算符 含义 功能
& 按位与 两个为1,结果为1;否则为0。
| 按位或 两个只要有一个为1,结果为1。
按位异或 两个同号结果为0(假)异号则结果为1(真)
取反 按位取反,即将0变1,将1变0。
上一篇 下一篇

猜你喜欢

热点阅读