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

问题描述 投票:-3回答:1

我知道这是一个奇怪的问题,但更奇怪的是.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()......

vb.net byte add subtraction
1个回答
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(“signed byte”)。

© www.soinside.com 2019 - 2024. All rights reserved.