1. 位操作符
位操作符属于操作符中比较难的内容,位操作符以二进制为单位进行运算,操作的对象以及结果都是整数型。位操作符有如下几个:&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、>>(右位移)和<<(左位移)。
具体说明看下表:
运算符 | 名称 | 例子 | 功能 |
& | 按位与 | A&B | A和B进行位与运算 |
| | 按位或 | A|B | A和B进行位或运算 |
~ | 按位取反 | ~A | A进行取反运算 |
^ | 按位异或 | A^B | A和B进行位异或运算 |
>> | 右位移 | A>>c | A右移c位 |
<< | 左位移 | A<<c | A左移c位 |
依此介绍一下各种位运算。
1)位与运算(A&B)
位与运算中,A和B按位进行与运算,当每位对应全是1的时候对应结果位1,反之为0
1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 |
0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 |
0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
可以看出,当10111001&00100011得到00100011。当对应位同时为1才为1。
2)位或运算(A|B)
1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
可以看出,当10110010 | 01011110得到11111110,对应位置存在一个1的时候即为1。
3)异或位运算(A^B)
1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 |
1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 |
可以看出,10110010^01011110得到11101100,对应位置相反的时候,即0对应1,1对应0的时候得到1。
4)按位取反运算(~A)
0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
按位取反的过程中需要运用补码运算,即0补为1,1补为0。
5)左右位移
右移时,(第一行为移动前,第二行为移动后)
0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | |
0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
右边最低位为溢出位被丢弃,在填充左侧最高位时,如果最高位是0,则填0,如果最高位是1,则填1。右移相当于除上2的n次方。
左移时, (第一行为移动前,第二行为移动后)
0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | |
0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
左边最高位为溢出位被丢弃,在最右边空位补0,左移相当于乘上2的n次方。
这章内容带领大家深入了解计算机世界的0和1,可以选择性去掌握了解,最后来介绍一下运算符的优先级,在算法运算时遇到操作符优先级问题的时候可以参考此表格。
由低到高 | <、>、<=、>=、!=、== |
| | |
^ | |
& | |
<<、>> | |
+、- | |
*、/、%、// | |
~、+、- | |
** |
这一章内容比较抽象,可以反复阅读去掌握它的内容,下一节我们学习Python的控制结构。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程