位操作符的几种题型
目录
题型一:寻找“单身狗”。
题型二:计算一个数在二进制中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;
}