使用位操作交换2个整数时遇到一些麻烦。下面是我的代码和控制台输入/输出。
#include <stdio.h>
int main() {
int num1 = 0;
int num2 = 0;
int position = 1;
scanf("%d", &num1);
scanf("%d", &num2);
for (int bitindex = 0; bitindex < 8; bitindex++) {
printf("\nPosition: %d\n", position);
printf("Number 1: %d\n", num1);
printf("Number 2: %d\n", num2);
if ((num1 & position) != (num2 & position)) {
num1 ^= (num1 << bitindex);
num2 ^= (num2 << bitindex);
}
if (bitindex == 0) {
position++;
}
else {
position *= 2;
}
}
// printf("Number 1: %d\n", num1);
// printf("Number 2: %d\n", num2);
}
输出:
4 7
Position: 1 Number 1: 4 Number 2: 7
Position: 2 Number 1: 0 Number 2: 0
Position: 4 Number 1: 0 Number 2: 0
Position: 8 Number 1: 0 Number 2: 0
Position: 16 Number 1: 0 Number 2: 0
Position: 32 Number 1: 0 Number 2: 0
Position: 64 Number 1: 0 Number 2: 0
Position: 128 Number 1: 0 Number 2: 0
我可能做的是完全错误的事情,对于底层C编程我还是很陌生。我的算法天生就有缺陷吗?有没有更简单的方法可以做到这一点?欢迎任何帮助和建议。
我的算法天生就有缺陷吗?
是。您需要在特定位置反转位。
num1 ^= position;
num2 ^= position;
1 * 2
等于1 + 1
。只需执行position *= 2;
每个循环。
int position = 1;
for (int bitindex = 0; bitindex < 8; bitindex++) {
if ((num1 & position) != (num2 & position)) {
num1 ^= position;
num2 ^= position;
}
position *= 2;
}
有没有更简单的方法可以做到这一点?
是的,按照注释中的建议用xor交换值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句