2つの整数のXORは範囲外になることがありますか? 質問する

2つの整数のXORは範囲外になることがありますか? 質問する

私は配列内の孤立した整数を見つけるアルゴリズムを研究していましたが、その実装は次のとおりです。

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この場合、データ型では表現できない大きな整数になる可能性があります。私の質問は次のとおりです。

  1. XOR型に格納できないほど大きな整数値を生成することは可能でしょうかint?
  2. もしこれが起こる可能性がないのであれば、その証拠はあるのでしょうか?

ベストアンサー1

XORビットを結合し、以前にビットが設定されていなかった場所に新しいビットを作成しないため、範囲外になることはありません。

結果は5正しいです。値のバイナリ表現とXOR結果を見てください。

10    00001010
20    00010100
30    00011110
 5    00000101
20    00010100
10    00001010
30    00011110
--------------
      00000101 => 5

多くの ed 値の結果を計算するための簡単なヘルプは次XORのとおりです。結果では、奇数ビットが結合された部分にはビットが設定され、偶数ビットにはビットが設定されません。

もしこれが起こる可能性がないのであれば、その証拠はあるのでしょうか?

XOR個々のビットのキャリーなしの加算と同じです。キャリーなしでビットを加算すると、オーバーフローは発生せず、int値が範囲外になることはありません。

おすすめ記事