为什么我不能在字节变量中存储负值?

时间:2013-02-18 15:02:11

标签: c# byte

我正在转换使用Java而不是C#

的代码
byte[] buffer = new byte[64];
this.buffer[((int)this.count & 0x3F)] = -128;

这会产生编译时错误“常量值'-128'无法转换为'byte'。”如何为一个字节存储负数?

2 个答案:

答案 0 :(得分:15)

在C#中,byte代表无符号 8位整数,因此无法保持负值(有效值范围从0到{{1} })。另一种选择是255,它是签名的 8位整数(从sbyte-128的有效值。)

答案 1 :(得分:6)

Java中的byte数据类型是签名( - 128-127)。 C#中的等效数据类型为sbyte

所以等效的C#代码如下:

sbyte[] buffer = new sbyte[64];
buffer[..] = -128;

如果需要无符号字节数组(0-255),则与byte -128具有相同位模式的sbyte为128(0x80)。

byte[] buffer = new byte[64];
buffer[..] = 128;

另请参阅: Integral Types Table (C# Reference)