C语言中位运算符共有六种
目录
1.&(按位与)
2. |(按位或)
3.^(按位抑或)
4.~(按位取反)
5.<<(左移)
6. >>(右移)
#include<stdio.h>
int main(void)
{
int a=3,b=5,c;
c=a&b;
printf("%d",c); //结果c=1
return 0;
上面使用 按位与& 的一段程序运行结果为c=1
我们用二进制来分析一下它的计算规则。
a=3 二进制为 0000 0011
b=5 二进制为 0000 0101
a&b 的意思就是01算法,通俗来讲a和b的第八位都为1,所以第8位&后的结果为1,前面7位&后的结果都为0
按位计算结果是0000 0001
所以最终c=a&b的结果为c=1
(1)清零
#include<stdio.h>
int main(void)
{
int a=3,b=0,c;
c=a&b;
printf("%d",c); //结果c=0
return 0;
a=3 二进制为 0000 0011
b=0 二进制为 0000 0000
a&b 8个位的运算结果都为0
所以最终c=0
(2) 取某些指定位
假定a=5,二进制为0000 0011
我们要取a的第3黑第6位
只需计算
0000 0101和1111 1111的结果
可得 c的二进制为0000 0101
所以a的第3位为0,第6位为1
(3)保位
例如计算a&b要保a的哪一位,只需将b中对应的位设为1,其余的位设为0.即可实现a的保位
2. |(按位或)用于对一个数据的某些位定值为1
对应位之间按位或的计算 即 0 | 0= 0 , 1 | 0= 1 , 0 | 1= 1 , 1 | 1= 1
( | 的计算原理)
#include<stdio.h>
int main(void)
{
int a=3,b=5,c;
c=a|b;
printf("%d",c); //c的结果=7
return 0;
c=a|b
a=3 二进制为 0000 0011
b=5 二进制为 0000 0101
计算结果为0000 0111 即c=7
3.^(按位抑或)
(计算原理)
对应位置见的抑或运算,相同为0,相异为1
即 0 ^ 0=0 , 0 ^ 1= 1 , 1 ^ 0= 1 , 1 ^ 1= 0 。
#include<stdio.h>
int main(void)
{
int a=3,b=5,c;
c=a^b;
printf("%d",c);//c的结果为6
return 0;
c=a^b
a=3 二进制为 0000 0011
b=5 二进制为 0000 0101
计算结果为0000 0110 即c=6
4.~(按位取反)
#include<stdio.h>
int main(void)
{
int b=5,c;
c=~b;
printf("%d",c);//c的结果为-6
return 0;
b=5 b的二进制为0000 0101
~b为1111 1010,用十进制表示即为-6。
5.<<(左移)
#include<stdio.h>
int main(void)
{
int b=5,c,d;
c=b<<1;
d=b<<3;
printf("c=%d d=%d",c,d);//最终结果c=10,d=40
return 0;
b<<左移n个单位即b乘以2^n
6. >>(右移)
#include<stdio.h>
int main(void)
{
int b=40,c,d;
c=b>>1;
d=b>>3;
printf("c=%d d=%d",c,d);//结果为c=20,d=5
return 0;
b<<左移n个单位即b除以2^n