位运算
原码、反码、补码概念
- 二进制的最高位是符号位:0表示正数,1表示负数
- 正数的原码,反码,补码都一样(三码合一)
- 负数的反码=它的原码符号位不变,其它位取反(0->1,1->O)
- 负数的补码=它的反码+1
- 0的反码,补码都是0
- 在计算机运算的时候,都是以补码的方式来运算的
例题
取反
按位&
右移
练习
~2 按位取反
2补码: 00000000 00000000 00000000 00000010
取反补码: 11111111 11111111 11111111 11111101
取反反码: 11111111 11111111 11111111 11111100
取反原码: 10000000 00000000 00000000 00000011 =>-3
2&3
2补码: 00000000 00000000 00000000 00000010
3补码: 00000000 00000000 00000000 00000011
2&3原码: 00000000 00000000 00000000 00000010=>2
2|3
2补码: 00000000 00000000 00000000 00000010
3补码: 00000000 00000000 00000000 00000011
2|3原码: 00000000 00000000 00000000 00000011=>3
~-5
-5原码: 10000000 00000000 00000000 00000101
-5反码: 11111111 11111111 11111111 11111010
-5补码: 11111111 11111111 11111111 11111011
-5取反原码: 00000000 00000000 00000000 00000100=>4
13&7
13补码: 00000000 000000000 00000000 00001101
7补码: 00000000 000000000 00000000 00000111
13&7原码: 00000000 000000000 00000000 00000101=>5
-3^3
-3原码: 10000000 00000000 00000000 00000011
-3反码: 11111111 11111111 11111111 11111100
-3补码: 11111111 11111111 11111111 11111101
3补码: 00000000 00000000 00000000 00000011
-3^3补码: 11111111 11111111 11111111 11111110
-3^3反码: 11111111 11111111 11111111 11111101
-3^3原码: 10000000 00000000 00000000 00000010=>-2