この JavaScript コードを Safari で実行する
// expected output - array containing 32 bit words
b = "a";
var a = Array((b.length+3) >> 2);
for (var i = 0; i < b.length; i++) a[i>>2] |= (b.charCodeAt(i) << (24-(i & 3)*8));
そして、iOS シミュレーターのこの (Objective-)C コード
int array[((@"a".length + 3) >> 2)];
for (int i = 0; i < @"a".length; i++) {
int c = (int) [@"a" characterAtIndex:i];
array[i>>2] |= (c << (24-((i & 3)*8)));
}
異なる出力が得られます-連続して(JavaScript)1627389952および(Objective-C)1627748484。
最初の 4 桁は常に同じなので、エラーは精度に関係していると思いますが、問題を特定できません。
編集
この不注意で申し訳ありませんが、どうもありがとうございました (@Joni と皆さん)。C コードの配列がいくつかのランダムな値で満たされていることは正しかったです。配列内のすべての要素をゼロに設定して問題を解決しました。
memset(array, 0, sizeof(array));
興味のある方は、C コードは次のようになります。
int array[((@"a".length + 3) >> 2)];
memset(array, 0, sizeof(array));
for (int i = 0; i < @"a".length; i++) {
int c = (int) [@"a" characterAtIndex:i];
array[i>>2] |= (c << (24-((i & 3)*8)));
}