次のようなC#コードがあります。
uint a = 0x9E3779B9;
a += (uint)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24));
そのコードの後、a == 228 452 386
今、私はこのC#コードをPHPに変換しようとしていますが、PHPではその数は同じようにオーバーフローしません。
$a = 0x9E3779B9;
$a += ($url[$k+0] + ($url[$k+1] << 8) + ($url[$k+2] << 16) + ($url[$k+3] << 24));
そのコードの後、$ a == 4 523 419 682
どちらの場合も、「url」はASCII値の配列として扱われます。$ aが2行目の結果に追加されるまで、は同じ結果を返します。その時点で、C#のuintは約2億2800万にオーバーフローします。PHPは「賢く」なり、「正しい」答えを出します。
しかし、私はC#が与えるオーバーフローした答えが欲しいです。私は何をすべきか?