原码、反码和补码
源码:最高位符号位,对其它的位进行本身绝对值即可
反码:
- 正数:反码和原码相同
- 负数:符号位为1,其余位对原码取反
补码: - 正数:补码和原码相同
- 负数:符号位是1,反码+1
测试
# 如果是正数,那都是一样的
1
# 原码 0000 0001
# 反码 0000 0001
# 补码 0000 0001
# 如果是负数
-1
# 原码 1000 0001
# 反码 1111 1110
# 补码 1111 1111
计算机底层数字的存储,正数存储的原码,负数存储的是补码
位运算
与运算(and &)
1011 0001
1101 1000
----------- 与运算
1001 0000
或运算(or |)
1011 0001
1101 1000
----------- 或运算
1111 1001
异或运算(xor ^)
不一样就是1。10 01
1011 0001
1101 1000
----------- 异或运算
0110 1001
非运算(单目运算符 not ~)
0就是1,1就是0
1101 1000
----------- 非运算
0010 0111
位运算(移动位)
左移(shl <<)
0000 0001 所有二进制位全部左移若干位,高位丢弃,低位补0
0000 0010
右移(shr >>)
0000 0001 所有二进制位全部右移若干位,低位丢弃,高位就需要补0或1(符号位决定)
0000 0000