java 和 c# 中右移运算符的不同结果
BHere 是代码:
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));
}
我已经阅读过这个问题,并且我相信有一种相对简单的方法来理解不同的行为,但我需要一些帮助来实现这种理解。请问有人接盘吗?
非常感谢!
编辑:好的,现在使用 Byte.toString()。 c# 的输出 = 254 java = -2
BHere's the code:
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));
}
I've read around this problem, and I believe there is a relatively simple way of understanding the different behavior, but I need a little help in reaching this understanding. Any takers, please?
Many thanks!
EDIT: ok, now using Byte.toString(). Output for c# = 254 java = -2
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Java
byte
是有符号的,因此如果数字为负数,>>
将从左侧填充1
位。C#
byte
是无符号的,因此>>
运算符填充0
位。在 C# 代码中将
byte
更改为sbyte
,或者在 Java 中使用>>>
。Java
byte
is signed so>>
will fill in1
bits from the left if the number is negative.C#
byte
is unsigned so the>>
operator is filling in0
bits.Either change
byte
tosbyte
in your C# code or use>>>
in Java.Java 中的字节是有符号的值。在这种情况下,您实际上可以只使用:
或者:
Byte in Java is a signed value. In this case you could actually just use:
Alternatively:
尝试在Java中使用
>>>
。这会在不考虑符号位的情况下进行位移位。Try to use in Java
>>>
. This does bit-shifting without taking care of the sign-bit.