Den*_*gin 1 java bit-shift bitwise-operators
简单的问题:为什么如果我将Java中的无符号右移应用于字节变量(以及简短),它会将其威胁为int:
byte x = -1;
System.out.println(x >> 2);
System.out.println(x >>> 1);
System.out.println(Integer.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)
控制台输出:
-1
2147483647
2147483647
Run Code Online (Sandbox Code Playgroud)
只能在Java中使用int和long的移位运算符(就像所有其他数字运算符一样),因此在移位之前,字节会自动转换为int.这也发生在算术右移,但是-1 >> 2无论什么类型都是-1 -1,因为算术上向右移位的二进制表示111...111仍然是111...111,在逻辑上它变为011...111,即移位类型的最大值.
PS:算术移位是有符号移位,逻辑移位是无符号移位.
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |