0x0f 或0X0f 0x/0X 代表这个数是16进制数 num << 1 表示按位左移1位二进制位
public static void main(String[] args) { int num = 0xFFFFFFE; System.out.println(Integer.toBinaryString(num)); for(int i=0;i<4;i++){ num = num << 1; System.out.println(Integer.toBinaryString(num)); } System.out.println(Integer.toBinaryString(Integer.MAX_VALUE)); System.out.println(Integer.toBinaryString(-32)); System.out.println(Integer.toBinaryString(32)); }
num << 1 表示按位左移1位二进制位
int num = 0xFFFFFFE;
System.out.println(Integer.toBinaryString(num));
for(int i=0;i<4;i++){
num = num << 1;
System.out.println(Integer.toBinaryString(num));
}
System.out.println(Integer.toBinaryString(Integer.MAX_VALUE)); System.out.println(Integer.toBinaryString(-32));
System.out.println(Integer.toBinaryString(32));
}
^@^
再左移一位是00111111111111111111111111111000,
即111111111111111111111111111000,十进制是1073741816
再左移一位是01111111111111111111111111110000,
即1111111111111111111111111110000,十进制是2147483632,
再左移一位是11111111111111111111111111100000,第一位是1,所以是负数,其值是取反加1再取负,即取反得00000000000000000000000000011111(31)加1得32,取负后即-32。
进行四次<<1操作每次的结果是0x1FFFFFFC
0x3FFFFFF8
0x7FFFFFF0
0xFFFFFFE0//这步结果益处,只保留了后面的计算机内用补码进行运算
把0xFFFFFFE0转换成十进制
因为在这里int是32位的,就是-32了
如果是64位的,那就不是-32了
为什么是这个样子呢?