BHere的代码:
C#
private void button1_Click(object sender, EventArgs e)
{
int a = -33554432;
byte b = (byte)(a >> 24);
MessageBox.Show(b.ToString());
}
Run Code Online (Sandbox Code Playgroud)
java的
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
int a = -33554432;
byte b = (byte)(a >> 24);
JOptionPane.showMessageDialog(null, Byte.toString(b));
}
Run Code Online (Sandbox Code Playgroud)
我已经阅读了这个问题,我相信有一种相对简单的方法来理解不同的行为,但我需要一些帮助才能达到这种理解.请问有谁?
非常感谢!
编辑:好的,现在使用Byte.toString().c#的输出= 254 java = -2
Java byte已签名,因此如果数字为负数,则会从左侧>>填充1位.
C#byte是无符号的,因此>>运算符填充0位.
要么在C#代码中更改byte,要么在Java中sbyte使用>>>.
Java中的字节是带符号的值.在这种情况下,您实际上可以使用:
// Note the triple >
int b = a >>> 24;
Run Code Online (Sandbox Code Playgroud)
或者:
byte b = (byte) (a >> 24);
int c = b & 0xff;
Run Code Online (Sandbox Code Playgroud)