我一直在研究在数组中寻找孤独整数的算法,下面是实现:
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
类型中? - 如果这不可能发生,那么有证据证明吗?
最佳答案
XOR
永远不会越界,因为它会组合位并且不会在之前没有设置位的情况下创建新位。
结果5
是正确的。查看值的二进制表示和 XOR
结果
10 00001010
20 00010100
30 00011110
5 00000101
20 00010100
10 00001010
30 00011110
--------------
00000101 => 5
计算许多 XOR
值的结果的简单帮助是:结果将设置一个位,其中奇数位组合在一起,没有位设置偶数位。
If it is not possible that this can happen then is there a proof for this?
XOR
等价于不进位的加法。当您添加不带进位的位时,不会发生溢出,因此 int
值不会超出范围。
关于c++ - 两个整数的异或可以超出界限吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28320454/