Java 具有奇怪行为的左移位运算符

Java 具有奇怪行为的左移位运算符,java,Java,只是出于好奇,当我做以下事情时: public static void main(String... args){ byte a = 2; byte b = 1; byte c = (byte) a<<b; System.out.println(c); } 只要包含括号,一切都正常工作,左移位运算符成功地得到答案4。 这是什么魔法 简单byte“这是什么魔法?”你是在问左移位运算符做什么?还是你在问演员们都做些什么?巫术也不是。没有括号,表示(byt

只是出于好奇,当我做以下事情时:

public static void main(String... args){
    byte a = 2;
    byte b = 1;
    byte c = (byte) a<<b;
    System.out.println(c);
}
只要包含括号,一切都正常工作,左移位运算符成功地得到答案
4

这是什么魔法

简单
byte“这是什么魔法?”你是在问左移位运算符做什么?还是你在问演员们都做些什么?巫术也不是。没有括号,表示
(byte)a
int t=a@ShayanAhmad除非运算符的两侧(操作数)都提升为
int
,否则为True。
a
字节的转换是多余的,是不可操作的,因为
a
已经是
字节了。一个好的IDE实际上会提醒您这一点。这两个
byte
值随后被提升为
int
Simple
byte“这是什么魔法?”之前,您是否在询问左移位运算符的作用?还是你在问演员们都做些什么?巫术也不是。没有括号,表示
(byte)a
int t=a@ShayanAhmad除非运算符的两侧(操作数)都提升为
int
,否则为True。
a
字节的转换是多余的,是不可操作的,因为
a
已经是
字节了。一个好的IDE实际上会提醒您这一点。这两个
字节
值随后在

public static void main(String... args){
    byte a = 2;
    byte b = 1;
    byte c = (byte) (a<<b); //the parenthesis were added only.
    System.out.println(c);
}