原码反码补码
无符号数和有符号数
无符号数:所有位都用于表示数的大小
有符号数:最高位是符号位(1表示负数,0表示正数),其余位表示数值大小
编码规则
有符号数的编码规则
原码:最高位是符号位,对其他的位进行本身的绝对值
反码:
- 正数:反码和原码相同
- 负数:符号位一定是1,其余位是对原码取反
补码:
- 正数:反码和原码相同
- 负数:符号位一定是1,其余位为反码加1
//正数
1
//原码 0000 0001
//反码 0000 0001
//补码 0000 0001
//负数
-1
//原码 1000 0001
//反码 1111 1110
//补码 1111 1111
-7
//原码 1000 0111
//反码 1111 1000
//补码 1111 1001
位运算
与运算(and &)
或运算(or |)
异或运算(xor ^)
相反为1,相同为0
非运算(not ~)
左移:(shl<<)
所有二进制位全部左移若干位,高位丢弃,低位补0
0000 0001
左移:
0000 0010
右移:(shr>>)
所有二进制位全部右移若干位,低位丢弃,高位补0或1(由符号位决定)
0000 0001
右移:
0000 0000
位运算的加减乘除
加法:
4 + 5
减法:
4 - 5
将减法转换为加法,负数用补码表示
(-5) --> 原码:1000 0101 --> 反码 :1111 1010 -->补码 :1111 1011
乘法:
x*y --> y个x相加
除法:
x/y --> x可以减去多少y