引入:显而易见,计算机里的信息都是按二进制存储的,然而它们是如何运算的呢,所以说就要学习位运算啦。
一.简单看看
0.先把全部拉出来看看:
运算符 含义
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移
tips_1:~不是二目运算符
tips_2:位运算不能用实型数据
tips_3:位运算不是逻辑运算(逻辑运算符“&&”,“||”,“!”等)
tips_4:0与1分别表示false和true;
1.按位与
(1&1)=1;
(1&0)=0;
(0&0)=0;
由上面三个式子,可知,“&”只有在两个变量都取1时才为1,其他都为0;
01010100
00111011 &
——————
00010000
2.按位或
(1|1)=1;
(1|0)=1;
(0|0)=0;
由上面三个式子,可知,“|”只要一个变量取1时就为1,而两个都为0时才为0;
01010100
00111011 |
——————
01111111
3.按位异或
(1^1)=0;
(1^0)=1;
(0^1)=1;
(0^0)=0;
可以看出,如果某位不同则该位为1, 否则该位为0;
01010100
00111011 ^
——————
00010000
4.取反
额,这个。。。(好吧,就是把1变成0,0就变成1);
5.左移和右移
“<<”就是将一个二进制数向左移一位(后面加个0)
“>>”就是将一个二进制数向右移一位(后面去一位)
所以“<<”就是将一个数乘2(类比十进制,后面加个0就是乘10)
“>>”就是将一个数除以2;
6.优先级
C语言中位运算符之间,按优先级顺序排列为
- C语言中位运算符之间,按优先级顺序排列为
1 ~
2 << 、>>
3 &
4 ^
5 |
6 &= 、 ^= 、|= 、<<= 、>>=
tips:偶尔遇到<<<是指无符号右移。
二.稍微进阶(引用)