使用哪些变量operator >>是兼容的

Mil*_*ita 2 java variables

我这里得到的代码很少

int b=3;
b=b >> 1;
System.out.println(b);
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但是当我将变量b更改为byte,short,float,double时它包含错误,但是使用变量int和long它可以完美地工作,为什么它不能与其他变量一起使用?

Mik*_*bel 7

例如,位移运算符>>与任何整数类型兼容.但是,对于类似byte和的较小类型short,操作会执行扩展转换:结果会提升为类型int,因此无法重新分配回源类型.

因此,以下是合法的:

byte b = 3;
b = b >> 1;
Run Code Online (Sandbox Code Playgroud)

但这些任务合法的:

byte b = 3;
b = (byte)(b >> 1)
int c = b >> 1;
Run Code Online (Sandbox Code Playgroud)

至于为什么这些操作员不能使用float或者double,我会留给你探索.提示:考虑内存中这些类型布局以及对位移操作符的含义.