2的n次方
判断一个数是为2的n次方
解决思路
2的n次方的二进制表达只有一个1
代码编写
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
if ((n & (n - 1)) == 0)
{
printf("%d是2的n次方\n", n);
}
else
{
printf("%d不是2的n次方\n", n);
}
return 0;
}
求两个数不同(二进制)位的个数
解决思路
一个整数在内存中是由32位二进制存储的,找出不同位的个数就需要我们将每一位比特位进行比较,进而返回统计个数
代码编写
#include<stdio.h>
int main()
{
int a, b;
int i = 0;
int count = 0;
scanf("%d %d", &a, &b);
for (i = 0; i < 32; i++)
{
if (((a >> i) & 1) != ((b >> i) & 1))//每一位进行比较看是否相同
{
count++;
}
}
printf("%d\n", count);
return 0;
}
打印二进制数的奇数位与偶数位
解决思路
分别将奇数位与偶数位右移到最后一位&1进行输出
代码编写
#include<stdio.h>
int main()
{
int a, i = 0;
scanf("%d", &a);
for (i = 31; i >= 1; i -= 2)
{
printf("%d", (a >> i) & 1);//偶数位
}
printf("\n");
for (i = 30; i >= 0; i -= 2)//奇数位
{
printf("%d", (a >> i) & 1);
}
return 0;
}
交换两个变量
代码编写
建立临时变量tmp
#include<stdio.h>
int main()
{
int a, b, tmp;
scanf("%d %d", &a, &b);
tmp = a;
a = b;
b = tmp;
printf("%d %d", a, b);
return 0;
}
不建立临时变量
#include<stdio.h>
int main()
{
int a, b;
scanf("%d %d", &a, &b);
a = a ^ b;
b = a ^ b;//b=a^b^b=a
a = a ^ b;//a=a^b^a=b
printf("%d %d", a, b);
return 0;
}