两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:
7
#include <stdio.h> int main() { int a,b; int count; a =0; b = 0; count = 0; printf("请输入两个数"); scanf("%d %d",&a,&b); a = a^b; while(a) { ++count; a = a & (a-1); } printf("%d",count); return 0; }
编写函数:
unsigned int reverse_bit(unsigned int value);
这个函数的返回 值value的二进制位模式从左到右翻转后的值。
#include <stdio.h> int main() { int num = 0; int end = 0; int p = 0; int i = 0; printf("请输入一个数"); scanf("%d",&num); for( i = 31;i >= 0;i--) { p = (num & 1) << i; num = num >> 1; end += p; } printf("%u",end); return 0; }
不使用(a+b)/2这种方式,求两个数的平均值。
#include <stdio.h> int main() { int avg; int a,b; avg =0; a = 0; b = 0; printf("请输入两个数"); scanf("%d %d",&a,&b); avg = ((a & b) << 1)+(a ^ b) >> 1; printf("平均数是%u",avg); return 0; }
一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。
#include <stdio.h> int main() { int i,j; int arry[] = {7,7,88,88,9,66,66,4,4}; j = arry[0]; for(i =1; i < sizeof(arry)/sizeof(arry[0]);i++) { j ^= arry[i]; } printf("%u",j); return 0; }