1
我使用Java编写程序,使用带零填充(>>>)运算符的右移。 以下程序一切都很好。在Java中使用零填充运算符右移(>>>)只使用“int”而不使用“byte”
class First
{
public static void main(String[] args)
{
int b = -1;
int c = b>>>2;
System.out.println(b);
System.out.println(c);
}
}
输出是:
-1
1073741823
一切都在上述计划好的。但是,如果我写相同的程序字节:
class First
{
public static void main(String[] args)
{
byte b = -1;
byte c = (byte)(b>>>2);
System.out.println(b);
System.out.println(c);
}
}
输出是:
-1
-1
它看起来像“>>”操作符的工作,而不是“>>>”。我的预期输出是:
-1
63
请解释它背后的概念。
'(b >>> 2)'的类型是'int'。所以零位最终比位于“字节”的两个前导位要高得多。 –
@David Wallace但是b是一个字节。操作员正在使用字节。虽然在操作之后它返回int,但在它之前它变成了63。可能是我错了,但我很困惑。 –
你为什么说“之前”的操作变成了63?手术之后没有63。 '>>>'操作符作用于'int'表达式,而不是'byte',因此转换发生在操作之前。 –