位移位和字节转换在 Java 和 C# 中给出不同的结果

Bitwise shift and byte cast gives different results in Java and C#

我正在用 C# 和 Java 测试以下代码:

int lngCRC = 3012;
byte[] crc = new byte[2];
crc[0] = (byte)(lngCRC & 0xFF);
crc[1] = (byte)(lngCRC >> 8);

C# 输出为:

crc[0] = 196;
crc[1] = 11;

Java 输出为:

crc[0] = -60;
crc[1] = 11;

如何在两种语言中获得相同的结果?

Java 字节是有符号的(即介于 -128 和 127 之间)。我猜在 C# 中它们是未签名的。

3012 的二进制是 00001011 11000100.

不管是有符号字节还是无符号字节,高字节都是11

当您将低字节 - 11000100 - 视为无符号字节时,它是 196

当你把它当作一个带符号的字节时,它是-60。