原码、反码、补码:
原码:
数据的二进制
反码:
正数的原码就是它的反码
负数的反码是它的原码符号位不变,其它位按位求反
补码:
数据在内存中是以补码形式存储的
正数的原码就是它的补码
负数的补码是它的反码+1
负数的补码:
1、数据转换为二进制
2、二进制符号位不变,其余按位求反得到反码
3、反码+1得到补码
-127
1111 1111
1000 0000 符号位不变,其他取反
1000 0001 +1成补码
补码转数据:
无符号的补码直接转成十进制数据
有符号看最高位是0,说明是正数,也直接转成十进制数据
有符号且最高位是1,说明是负数
1、补码-1得到反码
2、反码符号位不变,按位求反得到原码
3、原码转换成十进制
11111111 补码
11111110 反码
10000001 原码 -1
最大值+1 = 最小值
最小值-1 = 最大值
位运算符:& | ~ ^ << >>
A & B 按位相与
01101010 0x6A
01110110 0x76
01100010 0x62
A | B 按位相或
01101010 0x6A
01110110 0x76
01111110 0x7E
~A 按位求反
01101010 0x6A
10010101 0x95
A^B 按位异或 相同为0,相异为1
01101010 0x6A
01110110 0x76
00011100 0x1C
A<<n 把A的补码向左移动n位,左边丢弃,右边补0
01101010 0x6A << 4
10100000 0xA0
A>>n 把A的补码向右移动n位,右边丢弃,左边补符号位
11101010 0xEA >> 3
11111101 0xFD