4. 位操作符:&、|、^
位操作符有:
& //按位与
| //按位或
^ //按位异或
注:他们的操作数必须是整数。
直接上代码:
#include <stdio.h>
int main()
{
int num1 = -3;
int num2 = 5;
num1 & num2;
num1 | num2;
num1 ^ num2;
return 0;
}
一道变态的面试题:
不能创建临时变量(第三个变量),实现两个数的交换。
#include <stdio.h>
int main()
{int a = 10;int b = 20;a = a^b;b = a^b;a = a^b;printf("a = %d b = %d\n", a, b);return 0;
}
练习:编写代码实现:求一个整数存储在内存中的二进制中1的个数。
参考代码:
//方法1
#include <stdio.h>
int main()
{int num = 10;int count= 0;//计数while(num){if(num%2 == 1)count++;num = num/2;
}printf("二进制中1的个数 = %d\n", count);return 0;
}
//思考这样的实现方式有没有问题?
//方法2:
#include <stdio.h>
int main()
{int num = -1;int i = 0;int count = 0;//计数for(i=0; i<32; i++){if( num & (1 << i) )count++;}printf("二进制中1的个数 = %d\n",count);return 0;
}
//思考还能不能更加优化,这里必须循环32次的。
//方法3:
#include <stdio.h>
int main()
{int num = -1;int i = 0;int count = 0;//计数while(num){count++;num = num&(num-1);}printf("二进制中1的个数 = %d\n",count);return 0;
}
//这种方式是不是很好?达到了优化的效果,但是难以想到。