C语言 位运算练习
程序员文章站
2022-07-15 08:52:17
...
/编写函数:
//unsigned int reverse_bit(unsigned int value);
//这个函数的返回值value的二进制位模式从左到右翻转后的值。
//
//如:
//在32位机器上25这个值包含下列各位:
//00000000000000000000000000011001
//翻转后:(2550136832)
//10011000000000000000000000000000
//程序结果返回:
//2550136832
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
unsigned int reverse_bit(unsigned int value) {
unsigned int tmp, num = 0;
for (int i = 0; i < 32; ++i) {
tmp = value % 2;
num = num * 2 + tmp;
value = value / 2;
}
return num;
}
//按"位的思想"
unsigned int reverse_bit(unsigned int value) {
int tmp, num = 0;
for (int i = 0; i < 31; ++i) {
//取出最后一位保存到tmp中
tmp = value & 1;
num = num | tmp;
num = num << 1;
value = value >> 1;
}
return num;
}
int main() {
unsigned int value;
scanf("%u", &value);
printf("%u\n", reverse_bit(value));
system("pause");
return 0;
}
//编程实现:
//一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。
//请找出这个数字。(使用位运算)
#include<stdio.h>
#include<stdlib.h>
int main() {
int arr[] = { 0, 0, 11, 11, 2, 3, 3, 9, 5, 9, 5 };
int res=0;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i) {
res ^= arr[i];
}
printf("%d\n", res);
system("pause");
return 0;
}
//不使用(a + b)/ 2这种方式,求两个数的平均值。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
int i,j,k,m;
//i是a&b相同的部分
i = a&b;
//j是a与b不同的部分
j = a^b;
//k=(a-b)/2
k = j >> 1;
m = i + k;
printf("%d\n", m);
system("pause");
return 0;
}
//交换两个数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
a = a^b;
b = a^b;
a = a^b;
printf("%d,%d\n", a, b);
system("pause");
return 0;
}
下一篇: C语言位运算