当前位置: 首页 > >

C | 位运算符

发布时间:

一、&


&??按位与(二进制之间);&& 逻辑与(也叫并且);与按位与(&)完全不同;一般用于信息采集;

例如:


#include
#include

int main(void)
{
int a = 5; //二进制为??0101
int b = 7; //二进制为??0111
/* 0 1 0 1
0 1 1 1
???????????? 按 位 相 与
0 1 0 1
0101??>等于5 */
int c;
c = a & b;
printf("%d
", c);
c = a && b; //逻辑运算符输出结果只为0 或 1
//a 与 b
printf("%d
", c);
system("pause");
return 0;
}



???????????????运行结果???????????????



二、 |


|??按位或| | 逻辑或(也叫或者)

#include
#include

int main(void)
{
int a = 5; //二进制为??0101
int b = 7; //二进制为??0111
int c;
c = a | b;
printf("%d
", c);
c = a || b; //逻辑运算符输出结果只为0 或 1
printf("%d
", c);
system("pause");
return 0;
}
/* 0 1 0 1
0 1 1 1
???????????? 按 位 相 或
0 1 1 1
0111??>等于 7 */


???????????????运行结果???????????????



三、 ~


~ ??按位取反

5 的二进制为??0101 按位取反为 1010

根据二进制为1010求原来的数(不懂的可以去看原码补码那一篇文章)


因为二进制符号位为1??>原数为负数(->取反(0101)->加一?>0110)= -6


四、^


按位异或??^相同为零, 不同为一
1 ^ 0 =1;
1 ^ 1 =0;

五、 <<


<i=<<3表示把 i 的二进制位向左移3位,右边补0
左移n位相当于乘以二的n次方

六、>>


>>??按位右移
i=>>3 表示把 i 的二进制位向右移3位算数右移,左边补0逻辑右移,看最高位来补(为1补1 ,为0补0)
左移n位相当于除以二的n次方(前提不能溢出)

位运算符运算速度比算数运算符更快
eg:1) a = i /8;
2) b = >>3;


2)比1)运算速度快



友情链接: