Vb.net Can';t使用带.NET字节的负数

Vb.net Can';t使用带.NET字节的负数,vb.net,byte,add,subtraction,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

我知道这是一个奇怪的问题,但更奇怪的是.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
For b As SByte = 88 To 14 Step -10
    Console.WriteLine("Byte=" + b.ToString)
Next
那么,这是唯一一种加/减字节值的方法吗

b = CByte(b + 5)
b = CByte(b - 5)
我这样问是因为性能对我的项目至关重要,我正在编写一个国际象棋引擎,我必须时刻考虑内存使用情况,所以最好以字节为单位存储棋盘信息


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

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

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
…很好用


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

Uhm,除非有基准测试,不要担心。你也可以使用整数。国际象棋引擎有基准测试。如果你问这类问题,你甚至离找到重要问题还有很长的路要走。。不管怎样,“没关系,需要的时候就用”。或者,只需使用一个并结束一天(它只是避免了强制转换,因为
b+5
b-5
将表达式扩展为整数)。好的,玩得开心!我已经解释了为什么CByte不重要(从整数转换时),它有什么作用,为什么需要它,以及当它位于密集阵列中时,如何仅在边界处使用它来节省空间。(一旦字节值没有存储在数组或其他密集模式中,对象管理的其他开销就会使保存的3个字节基本上不相关。)您希望值
-10
如何存储在字节中?为什么这么不愿意使用CByte?你对这个问题做过研究吗?看了那张照片?做了一些分析?为什么有时32位整数比16/8位整数更可取?