欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c语言-位运算

程序员文章站 2022-07-15 08:52:11
...

一组数据中只有一个数字出现了一次,其他数字都是成对出现的,请找出这个数字

int main() {
	int arr[] = { 1,2,3,6,3,2,1 };
	int i = 0;
	int ret = 0;
	for (i = 0; i < 7; i++) {
		ret = ret ^ arr[i];
	}
	printf("%d\n", ret);
	system("pause");
	return 0;
}

一组数据中只有两个数字是出现了一次,其他数字都是成对出现的,请找出这两个数字

int main() {
	int i = 0;
	int ret = 0;
	int pos = 0;
	int arr[] = { 1,2,3,4,6,7,4,3,2,1 };
	int len = sizeof(arr) / sizeof(arr[0]);
	int num1 = 0;
	int num2 = 0;
	for (i = 0; i < len; i++) {
		ret = ret ^ arr[i];
	}
	for (i = 0; i < 32; i++) {
		if (((ret >> 1) & 1) == 1) {
			pos = i;
			break;
		}
	}

	for (i = 0; i < len; i++) {
		if (((arr[i] >> pos) & 1) == 1) {
			num1 = num1 ^ arr[i];
		}
	}
	num2 = num1 ^ ret;
	printf("num1 = %d\nmun2 = %d\n", num1, num2);
	system("pause");
	return 0;
}