1、编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
#include <stdio.h>
//编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
//输入例子 :
//1999 2299
//输出例子 : 7
int differ(int a, int b)
{
int c = a ^ b;
int count = 0;
while (c)
{
count++;
c = c & (c - 1);
}
return count;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("%d", differ(a, b));
}
2、获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
#include <stdio.h>
//获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
int main()
{
int m = 0;
scanf("%d", &m);
int i = 0;
//偶数位
for (i = 31; i >= 1; i -= 2)
{
printf("%d ", (m >> i) & 1);
}
printf("\n");
//奇数位
for (i = 30; i >= 0; i -= 2)
{
printf("%d ", (m >> i) & 1);
}
return 0;
}
3、写一个函数返回参数二进制中 1 的个数。
比如: 15 0000 1111 4 个 1
#include <stdio.h>
//写一个函数返回参数二进制中 1 的个数。
//比如: 15 0000 1111 4 个 1
//方法一
int print1(int n)
{
int count = 0;
for (int i = 0; i < 32; i++)
{
if ((n & 1) != 0)
{
count++;
}
n = n >> 1;
}
return count;
}
//方法二
int print2(int n)
{
int count = 0;
while (n != 0)
{
count++;
n = n & (n - 1);
}
return count;
}
int main()
{
int n = 15;
printf("方法一:%d\n", print1(n));
printf("方法二:%d\n", print2(n));
return 0;
}
4、不允许创建临时变量,交换两个整数的内容
#include <stdio.h>
//不允许创建临时变量,交换两个整数的内容
//方法一
void change1(int a, int b)
{
a = a + b;
b = a - b;
a = a - b;
printf("方法一交换后a、b的值为:%d %d\n", a, b);
}
//方法二
void change2(int a, int b)
{
a = a^b;
b = a^b;
a = a^b;
printf("方法二交换后a、b的值为:%d %d\n", a, b);
}
int main()
{
int a = 2;
int b = 5;
change1(a, b);
change2(a, b);
}```