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

Jos*_*sef 2 .net c# java bit-manipulation bit-shift

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

int lngCRC = 3012;
byte[] crc = new byte[2];
crc[0] = (byte)(lngCRC & 0xFF);
crc[1] = (byte)(lngCRC >> 8);
Run Code Online (Sandbox Code Playgroud)

C#输出是:

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

Java输出是:

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

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

Era*_*ran 9

Java字节是有符号的(即-128到127之间).我想在C#中它们是未签名的.

二进制3012是00001011 11000100.

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

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

当你将它视为有符号字节时,它是-60.

  • 这个.在C#中,签名等效的`byte`是`sbyte`(又名`System.SByte`). (4认同)