私は配列内の孤立した整数を見つけるアルゴリズムを研究していましたが、その実装は次のとおりです。
int arr[] = {10, 20, 30, 5, 20, 10, 30};
int LonelyInteger = 0;
for(int i=0; i< 7; i++)
{
LonelyInteger = LonelyInteger ^ arr[i];
}
結果は です5
。
XOR
私の質問は、(演算によって生成される)整数は大きすぎるこの操作により:
LonelyInteger ^ arr[i]
int
この場合、データ型では表現できない大きな整数になる可能性があります。私の質問は次のとおりです。
XOR
型に格納できないほど大きな整数値を生成することは可能でしょうかint
?- もしこれが起こる可能性がないのであれば、その証拠はあるのでしょうか?
ベストアンサー1
XOR
ビットを結合し、以前にビットが設定されていなかった場所に新しいビットを作成しないため、範囲外になることはありません。
結果は5
正しいです。値のバイナリ表現とXOR
結果を見てください。
10 00001010
20 00010100
30 00011110
5 00000101
20 00010100
10 00001010
30 00011110
--------------
00000101 => 5
多くの ed 値の結果を計算するための簡単なヘルプは次XOR
のとおりです。結果では、奇数ビットが結合された部分にはビットが設定され、偶数ビットにはビットが設定されません。
もしこれが起こる可能性がないのであれば、その証拠はあるのでしょうか?
XOR
個々のビットのキャリーなしの加算と同じです。キャリーなしでビットを加算すると、オーバーフローは発生せず、int
値が範囲外になることはありません。