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

时间:2015-01-16 13:15:02

标签: java c# .net bit-manipulation bit-shift

我正在使用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;

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

1 个答案:

答案 0 :(得分:9)

Java字节被签名(即在-128和127之间)。我想在C#中它们是未签名的。

3012 in binary是00001011 11000100

高位字节为11,无论它是否被视为有符号或无符号字节。

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

当您将其视为有符号字节时,它是-60。