原码第一位是符号位,表示正负,0是正,1是负,后面的表示数值
反码:正数和原码一样 ,负数的话,符号位不变,其他位置取反
补码:正数和原码一样 ,负数的话,就是反码+1
计算机的二进制是由补码来表示的,所以在计算左移右移时,需要将二进制转换为原码计算结果(二进制-1,然后取反)
Integer的最大值(Integer.MAX_VALUE)是2147483647,二进制是0111 1111 1111 1111,所以如下:
补码:0111 1111 1111 1111 ,左移1位后,1111 1111 1111 1110, 因为是补码,所以要转换为原码计算(二进制-1,然后取反),减一后: 1111 1111 1111 1101 ,然后取反:1000 0000 0000 0010 ,值为-2
左移n位,就是乘以2的n次方
右移n位,就是除以2的n次方