C# 中的以下代码给出结果“228452386”
UInt32 a;
int k = 0;
a = 0x9E3779B9;
a += (UInt32)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24));
运行上述代码后,“a”包含“228452386”。
但是VB.NET中的以下相同代码会导致“算术运算导致溢出”。基本上最后一条语句是返回值“1868983913”,所以会产生运行时错误。
Dim a As UInt32
Dim k As Integer = 0
a = &H9E3779B9UI
a += CUInt(AscW(url(k + 0)) + (AscW(url(k + 1)) << 8) + (AscW(url(k + 2)) << 16) + (AscW(url(k + 3)) << 24))
请注意,上述代码中的变量“url”可以是任何字符串,并且两个代码都相同。
当我在 C# 和 VB.NET 中运行以下语句时,它们都返回相同的值
C#
(UInt32)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24))
VB.NET
CUInt(AscW(url(k + 0)) + (AscW(url(k + 1)) << 8) + (AscW(url(k + 2)) << 16) + (AscW(url(k + 3)) << 24))
两个语句都为“url”“info:microsoft.com”返回值“1868983913”。但是当我使用+= .........运行完整语句时, VB.NET 会给出错误,而 C# 返回值“228452386”。