原码反码补码

无符号数和有符号数

无符号数:所有位都用于表示数的大小

有符号数:最高位是符号位(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

posted @ 2020-08-19 11:08  yu10001  阅读(226)  评论(0编辑  收藏  举报