我知道这是一个奇怪的问题,但更奇怪的是.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()......
答案 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
。由于b
是byte
,因此它是“未签名”类型,并且尝试使用10
作为byte
执行添加。但是,当您尝试降级时,即-10
,那么它会尝试将-10
视为byte
,但这需要一个有符号的字节,因此,它会失败。
如果您编写如下代码:
For b As SByte = 88 To 14 Step -10
Console.WriteLine("Byte=" + b.ToString)
Next
......工作正常。
请注意使用SByte
(“有符号字节”)。