原码、补码、反码与位运算
-
原码:
数据的二进制 -
反码:
正数的原码就是反码
负数的反码是:它的原码符号位不变,其它位按位求反 -
补码:
所有数据在计算机中,都是以补码形式存储
正数的原码就是补码
负数的补码:
1、转换成二进制,得到原码
2、原码符号位不变,其余按位求反,得到反码
3、反码+1,得到补码
-127
1111 1111 原码
1000 0000 反码
1000 0001 补码
补码如何转成数据:
先确定是有符号还是无符号
1、无符号\有符号且最高位为0,补码直接转成十进制
2、有符号的且最高位为1
a、补码-1,得到反码
b、符号位不变,其余位按位求反,得到原码
c、原码转十进制数
1111 1111 补
1111 1110 反码
1000 0001 原码
-1
127+1 = -128
0111 1111 + 1
1000 0000 -128 -
位运算符
& | ~ ^ << >>
①A & B 按位相与
1010 1110 A 0xAE
0111 1100 B 0x7C
--------------
0010 1100 C 0x2C
②A | B 按位相或
1010 1110 A 0xAE
0111 1100 B 0x7C
--------------
1111 1110 C
③ ~A 按位求反
1010 1110 A 0xAE
-----------
0101 0001
④A ^ B 按位异或 相同为零,相异为一
1010 1110 A 0xAE
0111 1100 B 0x7C
--------------
1101 0010
⑤A << n 按位左移n位,左边超出的丢弃,右边补0
1010 1110 A << 3
0111 0000
⑥A >> n 按位右移n位,右边超出的丢弃,左边补符号位
1010 1110 A >> 3
1111 0101
注意:只要式子中出现了位运算符,必须转换成二进制补码再进行运算