右移操作符在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 = -2Java 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 >>>
中使用。这可以在不考虑符号位的情况下进行位移位。