C语言之位运算
来源:互联网 发布:互联网架构软件架构 编辑:程序博客网 时间:2024/06/04 23:27
1.编程实现:两个int(32位)整数m和n的二进制表达中有多少个位(bit)不同?
输入例子:1999和2299 输出例子:7.
代码实现:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
int count=0;
int i=0;
int n=0;
int m=0;
int arr1[32]={0};
int arr2[32]={0};
printf("请输入两个整形数据:\n");
scanf("%d%d",&n,&m);
for(i=0;i<32;i++)
{
arr1[i]=((n>>i)&1);
arr2[i]=((m>>i)&1);
if(arr1[i] != arr2[i])
{
count++;
}
}
printf("共有%d个位不同\n",count);
system("pause");
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int main()
{
int count=0;
int i=0;
int n=0;
int m=0;
int arr1[32]={0};
int arr2[32]={0};
printf("请输入两个整形数据:\n");
scanf("%d%d",&n,&m);
for(i=0;i<32;i++)
{
arr1[i]=((n>>i)&1);
arr2[i]=((m>>i)&1);
if(arr1[i] != arr2[i])
{
count++;
}
}
printf("共有%d个位不同\n",count);
system("pause");
return 0;
}
2.编写函数返回一个值二进制位模式从左到右翻转后的值
输入例子: 25 00000000 00000000 00000000 00011001
翻转后例子: 2550136832 10011000 00000000 00000000 00000000,输出2550136832
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
unsigned int reverse_bit(unsigned int num)
{
int ret=0;
int i=0;
for(i=0;i<32;i++)
{
ret+=(num&1)<<(31-i);
num>>=1;
}
return ret;
}
int main()
{
int src=0;
unsigned int num=0;
printf("请输入一个整形数据:\n");
scanf("%d",&num);
src=reverse_bit(num);
printf("翻转后的数字为:\n%u\n",src);
system("pause");
return 0;
}
#include<stdio.h>
#include<stdlib.h>
unsigned int reverse_bit(unsigned int num)
{
int ret=0;
int i=0;
for(i=0;i<32;i++)
{
ret+=(num&1)<<(31-i);
num>>=1;
}
return ret;
}
int main()
{
int src=0;
unsigned int num=0;
printf("请输入一个整形数据:\n");
scanf("%d",&num);
src=reverse_bit(num);
printf("翻转后的数字为:\n%u\n",src);
system("pause");
return 0;
}
3.不使用(a+b)/2这种方式,求两个数的平均值
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int aver(int num1,int num2)
{
int mid=0;
//mid=((num1-num2)/2+num2);
mid=(num1 & num2)+((num1^num2)>>1);
return mid;
}
int main()
{
int src=0;
int num1=0;
int num2=0;
printf("请输入两个整形数据:");
scanf("%d%d",&num1,&num2);
src=aver(num1,num2);
printf("平均数为:%d\n",src);
system("pause");
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int aver(int num1,int num2)
{
int mid=0;
//mid=((num1-num2)/2+num2);
mid=(num1 & num2)+((num1^num2)>>1);
return mid;
}
int main()
{
int src=0;
int num1=0;
int num2=0;
printf("请输入两个整形数据:");
scanf("%d%d",&num1,&num2);
src=aver(num1,num2);
printf("平均数为:%d\n",src);
system("pause");
return 0;
}
4.一组数据中只有一个数字出现了一次,其他谁有数字都是成对出现的,请找出这个数字
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i=0;
char ret=0;
char arr1[10];
gets(arr1);
for(i=0;i<sizeof(arr1)/sizeof(arr1[0]);i++)
{
ret^=arr1[i];
}
printf("%c没有匹配成功\n",ret);
system("pause");
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i=0;
char ret=0;
char arr1[10];
gets(arr1);
for(i=0;i<sizeof(arr1)/sizeof(arr1[0]);i++)
{
ret^=arr1[i];
}
printf("%c没有匹配成功\n",ret);
system("pause");
return 0;
}
2 0
- C语言之位运算
- C语言之位运算
- C语言之位运算
- C语言之位运算
- c语言之位运算
- C语言修行之位运算
- c语言特色之位运算
- C语言位运算之异或 ^
- c语言之坑--位运算
- c语言之位运算详解
- C语言基础之位运算
- C语言位运算
- C语言位运算
- C语言位运算
- c语言位运算
- C语言位运算
- c语言位运算
- C语言位运算
- 【BLE】CC2541之通过RSSI测距
- How To Clone Scrypt Based Altcoins for Fun and Profit
- [Android开发]eclipse报错:发现了以元素 'd:skin' 开头的无效内容,此处不应含有子元素
- 单链表的增删排序求长度的实现。
- Java规范
- C语言之位运算
- 单链表的基本操作
- 【HDU 2064】【递推】汉诺塔III
- poj 2186 Popular Cows 强连通分量分解
- Java开发中equals和==的区别
- 我们约定吧
- 怎样算出15个数的和
- mysql面试必会基础(二)
- 深入理解javascript原型和闭包系列 深入理解javascript原型和闭包(2)——函数和对象的关系