2012-05-06 70 views
1

我从一个有符号的字节数组开始,并将其转换为无符号..那么打印的结果是否正确?C#字节数组 - 有符号和无符号两难

byte[] unsigned = new byte[] {10,100,120,180,200,220,240}; 
sbyte[] signed = Utils.toSignedByteArray(unsigned); 

和打印(我只是一个StringBuilder追加他们):

签署:10100120,-76,-56,-36,-16]
无符号:10,100,120,180,200,220,240]

其中:

public static sbyte[] toSignedByteArray(byte[] unsigned){ 
    sbyte[] signed = new sbyte[unsigned.Length]; 
    Buffer.BlockCopy(unsigned, 0, signed, 0, unsigned.Length); 
    return signed; 
} 

如果我改变这个,我得到了相同的结果。

sbyte[] signed = (sbyte[])(Array)unsigned; 

不应-128(签字)成为0,-118成为10,等等..而不是10(符号)= 10(无符号)!?

由于
为sbyte -128至127
字节0到255

所以??

回答

6

带符号的整数表示在Two's complement system中。

实例:

Bits  Unsigned  2's complement 
      value  value 

00000000 0   0 
00000001 1   1 
00000010 2   2 
01111110 126   126 
01111111 127   127 
10000000 128   −128 
10000001 129   −127 
10000010 130   −126 
11111110 254   −2 
11111111 255   −1 
相关问题