gpt4 book ai didi

java - 当搜索出现奇数次的整数时,编译器正在逐步执行什么操作?

转载 作者:行者123 更新时间:2023-12-02 09:39:48 24 4
gpt4 key购买 nike

You are given an array with random integers. All integers occur an even amount of time throughout the array except for one integer. You are able to use ^ (or XOR) to single out which integer occurs an odd number of times in the array

我不明白编译器在运行这段代码时正在一步步做什么。

了解比较两个二进制数的加法/减法/异或原理。

int[] a = {20,1,-1,2,-2,3,3,20,5,5,1,2,4,20,4,-1,-2};

int xor = 0;
for (int i = 0; i < a.length; i++){
xor ^= a[i];
}
return xor;

运行上述代码后,20 将显示为出现奇数次的整数(出现 3 次,而不是所有其他整数出现 2 次)

如果你一步步调试并单步执行代码,例如你会存储20,那么命中1后,它会变成21,然后命中-1后,它会变成-22。我不明白编译器在 21 -> -22 步骤执行的数学运算。

最佳答案

关于这段代码,最重要的是要认识到 xor 的值是多少并不重要。位于循环的中间。您不需要知道 xor 的中间值之一是 -22 。重要的是它代表数字 20、1 和 -1 处于“奇”状态,而其他任何数字都处于“偶”状态(包括计数为 0)。

如您所知,使用 the XOR operator对同一数字进行第二次操作将反转第一次操作。即(a ^ b) ^ ba 。这一事实(以及 XOR 运算符的交换性)用于存储当前具有奇数计数的数字。

因为我们已知只有一个出现次数为奇数的数字,所以对所有出现次数为奇数的数字使用 XOR 运算符意味着所有出现偶数次数的数字都将反转出值 xor 。唯一不会自行反转的值是您正在搜索的数字。

编译器所做的就是生成字节码以使用 ^ (XOR) 运算符来操作变量 xor 。算法设计者使用此运算符作为算法的一部分来确定哪个整数出现奇数次。

关于java - 当搜索出现奇数次的整数时,编译器正在逐步执行什么操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57191680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com