java原码,反码,补码

 java是以补码的形式存在,正数的原码,反码补码都是一样的

负数的补码是:其正数原码,取反码后,再补1.(负数的表现方式是高一位为1)

-1 << 2
原码: 10000000 00000000 00000000 00000001
反码: 11111111 11111111 11111111 11111110
补码: 11111111 11111111 11111111 11111111

左移位后:
原码: 11111111 11111111 11111111 11111100
反码: 10000000 00000000 00000000 00000011
补码: 10000000 00000000 00000000 00000100   =====   -4

 


-10 << 4
原码: 10000000 00000000 00000000 00001010
反码: 11111111 11111111 11111111 00000101
补码: 11111111 11111111 11111111 00000110

左移位后:
原码:
11111111 11111111 11111111 01100000
反码:
10000000 00000000 00000000 10011111
补码:(最后以为补了1)
10000000 00000000 00000000 10100000   ====== -160

32+ 128 = 160 (第一位是1为负数,为-160)

 

 

----------------华丽的分割线----------------------

写完后发现

-1 << 2
-1的二进制: 10000000 00000000 00000000 00000001

-4的二进制: 10000000 00000000 00000000 00000100

不就是把1往左移动了两位吗?

手动滑稽

 

posted @ 2021-08-13 09:10  CoderCoding  阅读(160)  评论(0编辑  收藏  举报