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」を返します。しかし、+ = .........を指定して完全なステートメントを実行すると、 C#が値「228452386」を返す間、VB.NETはエラーを返します。