gpt4 book ai didi

C# 字节数组 - 有符号和无符号的困境

转载 作者:太空宇宙 更新时间:2023-11-03 19:23:27 24 4
gpt4 key购买 nike

我从一个带符号的字节数组开始,然后转换为无符号的..那么打印的结果是否正确?

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
字节 0 到 255

所以??

最佳答案

有符号整数在 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

关于C# 字节数组 - 有符号和无符号的困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10474186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com