【问题标题】:Java Bitshift Operation: error converting int to byteJava Bitshift 操作:将 int 转换为 byte 时出错
【发布时间】:2016-11-08 17:48:07
【问题描述】:

谁能告诉我为什么下面的代码会抛出编译错误“无法从 int 转换为字节”?

byte x = 2;  
byte y = (x >> 1);

我的意思是我清楚地将 x 和 y 都声明为字节,并且 'x >> 1' 将评估为 1,即仍然在一个字节的范围内。
另外当我做类似的事情时

byte x = -2;  
System.out.println(x >>> 1);

我希望结果为 126,因为我在b1111 1101 的最左边移动了一个0,即0111 1110。但是控制台正在打印'2147483647',所以看起来我的字节在0被移入之前已经转换为整数。这是为什么呢?请帮帮我。

【问题讨论】:

标签: java type-conversion bit-shift


【解决方案1】:

仅仅因为x >> 1 返回一个int,所以您只需将它显式地转换为byte 作为下一个:

byte y = (byte)(x >> 1);

还请注意,由于它是 int 运算符(或 long,具体取决于规范中的左侧操作符 cf §15.19),因此它的所有操作数都必须是 int 类型,这意味着在你的情况x 也将被隐式转换为int 换句话说x >> 1 相当于(int)x >> 1

【讨论】:

    猜你喜欢
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 2020-02-03
    相关资源
    最近更新 更多