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

本文关键字:存储 变量 字节 不能 为什么 | 更新日期: 2023-09-27 18:00:09

我正在转换在Java中有效但在C#中无效的代码

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

这会生成一个编译时错误"无法将常量值"-128"转换为"字节"。如何为字节存储负数?

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

在C#中,byte表示一个无符号8位整数,因此不能包含负值(有效值范围从0255)。另一种选择是sbyte,它是一个有符号8位整数(从-128127的有效值)。

Java中的byte数据类型是带符号的(-128–127)。C#中的等效数据类型是sbyte

因此,等效的C#代码如下:

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

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

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

另请参阅:积分类型表(C#参考)