位操作符的几种题型
目录
题型一:寻找“单身狗”。
题型二:计算一个数在二进制中1的个数
题型三:不允许创建临时变量,交换两个整数的内容
题型一:寻找“单身狗”。
1.1题目解析
在一个整型数组中,只有一个数字出现一次,其他数组都是成对出现的,请找出那个只出现一次的数字。
例如:
数组中有:1 2 3 4 5 1 2 3 4,只有5出现一次,其他数字都出现2次,找出5
1.2函数实现
int FindDog(int arr[], int sz)
{int m = arr[0];for (int i = 1; i < sz; i++){m ^= arr[i];}return m;
}
1.3实际代入
#include<stdio.h>
#include<stdlib.h>
int FindDog(int arr[], int sz)
{int m = arr[0];for (int i = 1; i < sz; i++){m ^= arr[i];}return m;
}
int main()
{int arr[] = { 1,1,2,3,4,5,2,3,4 };int sz = sizeof(arr) / sizeof(arr[0]);printf("%d", FindDog(arr, sz));return 0;
}
1.4运行结果举例
题型二:计算一个数在二进制中1的个数
2.1题目解析
写一个函数返回参数二进制中 1 的个数。
比如: 15 0000 1111 4 个 1
2.2函数实现
int Count(int n)
{int count = 0;while (n){n = n & (n - 1);count++;}return count;
}
2.3实际代入
#include<stdio.h>
int Count(int n)
{int count = 0;while (n){n = n & (n - 1);count++;}return count;
}
int main()
{int n = 0; scanf("%d", &n);printf("%d\n", Count(n));return 0;
}
2.4运行结果举例
题型三:不允许创建临时变量,交换两个整数的内容
3.1题目解析
不允许创建临时变量,交换两个整数的内容
例如:输入 5 3
输出 3 5
3.2代码实现
#include<stdio.h>
int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);a = a ^ b;b = a ^ b;a = a ^ b;printf("%d %d", a, b);return 0;
}