#include <stdio.h>
int main()
{
int a = 3;
int b = 5;
//负整数在计算机里是以补码的形式存储的
int c = a & b;
//是将a,b的值所等价的二进制数进行"与"运算
int d = a | b;
//是将a,b的值所等价的二进制数进行"或"运算
//注意:这里或运算是一个竖线"|",
//而条件语句中的或者是两条竖线"||"。
int e = a ^ b;
//是将a,b的值所等价的二进制数进行"异或"运算
int f = a << 1;
//尖头指向左,表示将a值所等价的二进制数,向左移一位
//高位移出的位就丢了,不用管,低位空出的位添0补位。
//
//若尖头向右(>>),表示将a值所等价的二进制数,向右移一位
//低位移出的位就丢了,不用管,高位空出的位又有两种情况
//1. 算术位移:就是原来符号位是0(1)就添0(1)
// 符号位:位于二进制数的最高位,当为0则是正数,为1则为负数。
//2. 逻辑位移:啥也不管就添0。
//可以充分利用异或
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a = %d\n", a);
printf("b = %d\n", b);
//可以将两个数在不创建第三个变量的情况下互换。
return 0;
}
求出一个数其所等价的二进制数中1的个数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 0;
printf("请输入一个整数:");
scanf("%d",& a);
int d = 0;
int e = 0;
for (e = 0; e < 32; e++)
//因为一个整型是占四个字节,而一个字节是八个位,所以是32
{
if ((1 & a >> e)== 1)
//先将a按位右移e个位,然后再和1按位与
{
d++;
}
}
printf("个数为:%d\n", d);
return 0;
}
或
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int input = 0;
int count = 0;
printf("请输入一个整数:");
scanf("%d", &input);
while (input)
{
if (input % 2 == 1)
{
count++;
}
input = input / 2;
}
//利用了十进制转化为二进制的方法
//在编程的时候,先去想,能够实现要求的方法,途径,过程。尽量多想几种可能,
//然后把这些可能再一一转换成代码
printf("个数为:%d\n", count);
return 0;
}