右移操作符在Java和c#中有不同的结果

本文关键字:结果 操作符 Java 右移 | 更新日期: 2023-09-27 18:10:36

代码如下:

c#

private void button1_Click(object sender, EventArgs e)
{
  int a = -33554432;
  byte b = (byte)(a >> 24);
  MessageBox.Show(b.ToString());
}
java

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    int a = -33554432;
    byte b = (byte)(a >> 24);
    JOptionPane.showMessageDialog(null, Byte.toString(b));
}

我已经阅读了这个问题,我相信有一种相对简单的方法来理解不同的行为,但我需要一点帮助来达到这个理解。有人愿意吗?

多谢!

编辑:ok,现在使用Byte.toString()。java = -2

右移操作符在Java和c#中有不同的结果

Java byte是有符号的,所以如果数字是负数,>>将从左边填充1位。

c# byte是无符号的,所以>>运算符填充0位。

在c#代码中将byte更改为sbyte,或者在Java中使用>>>

Byte在Java中是有符号值。在这种情况下,你可以直接使用:

// Note the triple >
int b = a >>> 24;

另外:

byte b = (byte) (a >> 24);
int c = b & 0xff;

尝试在Java >>>中使用。这可以在不考虑符号位的情况下进行位移位。