java中移位位时的不同行为
我正在使用Java中的位移位,并拥有以下一段按预期工作的代码:java中移位位时的不同行为,java,Java,我正在使用Java中的位移位,并拥有以下一段按预期工作的代码: final byte value = 1; final int shift = 1; byte result = value << shift; 这将导致编译错误: java: incompatible types: possible lossy conversion from int to byte 问题是导致此操作失败的方法是什么?,因为值和移位是此代码段中的编译时常量: final byte value = 1
final byte value = 1;
final int shift = 1;
byte result = value << shift;
这将导致编译错误:
java: incompatible types: possible lossy conversion from int to byte
问题是导致此操作失败的方法是什么?,因为
值和移位是此代码段中的编译时常量:
final byte value = 1;
final int shift = 1;
byte result = value << shift;
编译器没有证据表明shift
将表示这样的值,这不会导致精度损失,因此会引发编译错误
如果在这种情况下可以进行编译,那么您就可以执行shiftAndCheck(1,32)
将导致溢出字节
类型。默认情况下,对非浮点数进行算术运算将生成int
结果私有无效移位检查(最终字节值,最终int移位){
private void shiftAndCheck(final byte value, final int shift) {
byte result = (byte) (value << shift);
}
字节结果=(字节)(值value
是byte
类型,那么为什么消息从int到byte。值value
是在应用shift之前还是之后升级到int
的?因为默认情况下数字运算符(包括I类型代码(函数))是当然,如果没有得到问题中提到的错误消息,我会得到类型不匹配:无法从int转换为byte(对于OSXconsider上Java 1.8.0_60上的行byte result=value Am:byte b=1+1;
是可以的,但是byte b=byteVar+1;
不是。。。。
private void shiftAndCheck(final byte value, final int shift) {
byte result = value << shift;
}
private void shiftAndCheck(final byte value, final int shift) {
byte result = (byte) (value << shift);
}