不能使用带有.NET Byte的负数

时间:2015-03-14 04:47:29

标签: vb.net byte add subtraction

我知道这是一个奇怪的问题,但更奇怪的是.NET关于字节数据类型的行为。

这在VB.NET中非常有用:

    For b As Byte = 14 To 88 Step +10
        Console.WriteLine("Byte=" + b.ToString)
    Next

但这不是:

    For b As Byte = 88 To 14 Step -10
        Console.WriteLine("Byte=" + b.ToString)
    Next

如果第一个例子不可能,我会理解。

另外,就我查询而言,不可能像这样增加或减少字节值:

Dim b As Byte = 56

b += 1 'not possible
b -= 1 'not possible

那么,这是添加/减去字节值的唯一方法吗?

b = CByte(b + 5)
b = CByte(b - 5)

我问这是因为性能对我的项目至关重要,我正在编写一个Chess引擎,我必须一直考虑内存使用情况,所以最好尽可能以字节为单位存储电路板信息。

但我担心偶尔使用CByte()......

1 个答案:

答案 0 :(得分:0)

这里要理解的重要一点是代码:

For b As Byte = 14 To 88 Step 10
    Console.WriteLine("Byte=" + b.ToString)
Next

......实际上与:

相同
    Dim b As Byte = 14
Ret:
    Console.WriteLine("Byte=" + b.ToString)
    b = b + 10
    If b <= 88 then
        Goto Ret:
    End If

要专注的重要部分是b = b + 10。由于bbyte,因此它是“未签名”类型,并且尝试使用10作为byte执行添加。但是,当您尝试降级时,即-10,那么它会尝试将-10视为byte,但这需要一个有符号的字节,因此,它会失败。

如果您编写如下代码:

For b As SByte = 88 To 14 Step -10
    Console.WriteLine("Byte=" + b.ToString)
Next

......工作正常。

请注意使用SByte(“有符号字节”)。