60左移两位为什么不是-16,却是240,感觉特殊处理了
00111100 左移两位是 11110000,这个数是-16
@Test
public void test() {
byte e=60; /* 60 = 0011 1100 */
System.out.println(e<<2);//240
System.out.println((byte)0b11110000);//-16
}
60左移两位为什么不是-16,却是240,感觉特殊处理了
00111100 左移两位是 11110000,这个数是-16
@Test
public void test() {
byte e=60; /* 60 = 0011 1100 */
System.out.println(e<<2);//240
System.out.println((byte)0b11110000);//-16
}
因为e<<2运算时会先将类型提升到int,改成:
(byte)(e<<2)