初识位操作符
1.位操作符
1.0C语言中的真假
C语言中,0为假,别的数字为真,C语言中大部分的语句都按照真假来判断是否执行,除了多分支的,比如switch.
1.1按位并(&)
按位并的即是将数据进行二进制位下的逻辑“并“运算,“并”在数学中的含义是两者同时真才为真
1.2按位或(|)
按位或即是将数据进行二进制位下的逻辑“或”运算,“或”在数学中,任意一个为真即为真
1.3按位异或(^)
按位异或即是将数据进行二进制位下的逻辑“异或“运算,异或即相异为真,相同为假。
1.4右移操作符(>>)
同理即将数据转化为二进制,后进行向右右移一位,但右移分为两种右移,第一种是算术右移,第二种是逻辑右移,算术右移即全体右移后最左一位补算术位,往右移一位,最右边的舍弃,左边补0;逻辑右移即符号位参与运算。
1.5左移操作符(<<)
将数据转化成二进制,后向左进行位移,移出去的弃掉,最右边的补0。
1.6按位取反(~)
将数据转化为二进制下,1变为0,0变为1.
2.位操作符使用举例
2.1按位且、按位或应用举例
#include<stdio.h>//计算一个数字二进制下有多少个一
int main()
{
int a = 20;//00000000000000000000000000010100
int i = 0;
int count = 0;
//分析:可以利用 并 或 的性质 和右移操作符的性质进行计算
//00000000000000000000000000010100
//00000000000000000000000000000001
for(i = 1; i<=32; i++)
{
if(a&1 == 1)
{
count++;
}
a = a >> 1;
}
printf("%d",count);
return 0;
}
2.2按位异或的小应用
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
a = a^b;
b = a^b;
a = a^b;
return 0;
}
|