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往左移动了两位吗?
手动滑稽
原文:https://www.cnblogs.com/mark999/p/15135848.html