1.编程实现: //两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同? //输入例子 :

//1.编程实现:
//两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
//输入例子 :
//1999 2299
//输出例子 : 7
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int compare(int a, int b)
{
int i = 0;
int count = 0;
for (i = 0; i < 32; i++)
{
if (((a & 1) ^ (b & 1)) == 1)
{
count++;
}
a >>= 1;
b >>= 1;
}
printf("count=%d\n", count);
return 1;
}


int main()
{
int m = 0;
int n = 0;
scanf("%d%d", &m, &n);
compare(m, n);
system("pause");
return 0;
}


//2.编写函数:
//unsigned int  reverse_bit(unsigned int value);
//这个函数的返回 值value的二进制位模式从左到右翻转后的值。
//如:
//在32位机器上25这个值包含下列各位:
//00000000000000000000000000011001
//翻转后:(2550136832)
//10011000000000000000000000000000
//程序结果返回:
//2550136832
#include<stdio.h>
#include<stdlib.h>
unsigned int  reverse_bit(unsigned int value)
{
int i = 0;
unsigned ret = 0;                         //无符号型,不然最高位为1时当成符号位处理,溢出
for (i = 0 ; i <= 31; i++)
  {
ret <<= 1;
ret |= (value & 1);
value >>= 1;


}
printf("ret=%u\n",ret);                        //%u打印无符号整型
}


int main()
{
int num = 0;
scanf("%d", &num);
reverse_bit(num);
system("pause");
return 0;
}


//3.不使用(a + b) / 2这种方式,求两个数的平均值。
#include<stdio.h>
#include<stdlib.h>
int average(int x, int y)
{
int avr = 0;
avr = x - (x - y) / 2;
printf("avr=%d\n", avr);
return 1;
}


int main()
{
int a = 2;
int b = 3;
average(a, b);
system("pause");
return 0;
}


//4.一组数据中只有一个数字出现了一次。
//其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
#include<stdio.h>
#include<stdlib.h>
int find(int arr[5],int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
int j = 0;
int count = 0;
for (j = 0; j < sz; j++)
{
if (arr[i] == arr[j])
{
count++;
}
}
if (count == 1)
{
printf("一个数:%d ", arr[i]);
}
}
printf("\n");
}


int main()
{
int arr[5] = { 1, 2, 3, 1, 2 };
int sz = 0;
sz = sizeof(arr) / sizeof(arr[0]);
find(arr,sz);
system("pause");
return 0;

}








电影:星球大战外传种子。


猜你喜欢

转载自blog.csdn.net/lxp_mujinhuakai/article/details/53729240