目录
1.求两个数二进制中不同位的个数
编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
int count_deff_bit(int m, int n)
{
int i = 0;
int c = 0;
for (i = 0; i < 32; i++)
{
if ((m & 1) != (n & 1))
{
c++;
}
m >>= 1;
n >>= 1;
}
return c;
}
//运用异或操作符 同为0,异为1
int count_deff_bit(int m, int n)
{
int i = 0;
int c = 0;
int temp = m ^ n;
//计算temp的二进制位中有几个1
while (temp)
{
temp = temp & (temp - 1);
c++;
}
return c;
}
int main()
{
int m = 0;
int n = 0;
scanf("%d %d",&m,&n);
int ret = count_deff_bit(m, n);
printf("%d\n", ret);
return 0;
}
2.打印整数二进制的奇数位和偶数位
获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
#include <stdio.h>
void print(int m) //函数前面什么都不写时默认返回int
{
//打印奇数位
int i = 0;
for (i = 30; i >= 0; i -= 2)
{
printf("%d ", (m >> i) % 1);//m向右移动i位
}
printf("\n");
for (i = 31; i >= 1; i -= 2)
{
printf("%d ", (m >> i) % 1);//m向右移动i位
}
}
int main()
{
int m = 0;
scanf("%d", &m);
print(m);
return 0;
}
3.统计二进制中1的个数(3种方法)
#include<stdio.h>
int count_number_of_1(unsigned int m)
{
int c = 0;
while (m)
{
if (m % 2 == 1)
{
c++;
}
m /= 2;
}
return c;
}
int count_number_of_1(int m)
{
int c = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
if ((m&1) == 1)
{
c++;
}
m >>= 1;
}
return c;
}
int count_number_of_1(int m)
{
int c = 0;
while (m)
{
m = m & (m - 1);
c++;
}
return c;
}
int main()
{
int n = 0;//n放在内存中的补码的二进制中的1的个数
scanf("%d",&n);
int ret = count_number_of_1(n);
printf("\n", ret);
return 0;
}
4.交换两个变量(不创建临时变量)
#include<stdio.h>
int main()
{
int a ,b;
scanf("%d %d", a, b);
a = a^b;
b = a^b;
a = a^b;
printf("a=%d,b=%d\n", a, b);
return 0;
}
int main()
{
int a ,b;
scanf("%d %d", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("a=%d,b=%d\n", a, b);
return 0;
}
//存在栈溢出