C++运算符包括算数运算符、关系运算符、逻辑运算符、赋值运算符和位运算符等,其中位运算符是我们比较少用到的(至少我是),但它在C++语言中是必不可少的,这篇文章就来介绍一下C++中的位运算符
位运算符包括位逻辑运算符和移位运算符,顾名思义,位运算符作用于位,并逐位执行操作
位逻辑运算符:
& (位 ‘与’)
^ (位 ‘异或’)
| (位 ‘或’)
~ (为 ‘取反’)
移位运算符:(箭头指向哪边就是哪边移)
<< (左移)
>> (右移)
示例:假定变量A为10,变量B为20,将A,B化为二进制分别为01010,10100,因为运算时前面的许多0是A,B位运算后都是0,故为方便已省略,每个代码的解释后面的双等号箭头是直接运行的结果
下面逐一演示各个运算符的作用:
逻辑‘与’操作
计算原则:有0得0
cout<<(A&B)<<endl;//01010 & 10100 = 00000 ==>0(最终结果)
详细运算:
位运算符通过使用该表达式的二进制形式一一对齐来进行运算
逻辑‘或’操作
计算原则:有1得1
cout<<(A|B)<<endl;//01010 | 10100 = 11110 ==>30
计算过程与上面类似,故以下不做图解
逻辑‘异或’操作
计算原则:相同得0,不相得1
cout<<(A^B)<<endl;//01010
逻辑‘取反’操作
计算原则:与上面的不同,作用于一个表达式,1变为0,而0变为1,这里只对单个表达式A或B进行运算,所以补全前面的0
cout<<(~A)<<endl;//~0000000000001010 = 1111111111110101 ==>-11
至于上面的-11是怎么来的这里这里先不做解释,下篇文章介绍补码你就会理解
左移位操作
计算原则(默认移一位):数值向左移动一位(即去除最左边一位),并在最右边添加0
图解:
可以试试思考一下下面结论:
cout<<(A<<2)<<endl;//001010 << 2 ==>101000 ==>40
右移位操作
计算原则(默认移一位):数值向右移动一位(即去除最右边一位),并在最左边添加0,与左移类似
cout<<(A>>2)<<endl;//01010 >> 2 ==>00010 ==>2
图解与左移类似故不做重复
至此,位运算符的章节也在这里介绍完了,下一篇介绍补码