1

符号付きバイト配列から始めて、符号なしに変換します..印刷結果は正しいですか?

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

そして印刷(私はStringBuilderでそれらを追加するだけです):

署名: [10,100,120,-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
byte 0 ~ 255 なので

そう??

4

1 に答える 1

7

符号付き整数は、2 の補数システムで表されます。

例:

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
于 2012-05-06T20:55:43.623 に答える