首先谈谈位运算与逻辑运算的区别:尽管它们有一些相似之处,但针对的对象是不同的,位运算是对二进制数之间的运算,而逻辑运算是bool型之间的运算。下面我们开始讲位运算:
1、与运算:
只有同为1才取1,逻辑运算则是同true才true;
Pascal:and;
C++:&(逻辑运算则是&&);
举例:
3&5=011&101=001=1;
因此,判断某个二进制数某一位是否为1,只需将这个数与当且仅当对应位为1的一个二进制数进行与运算,为0则0,否则为1;
2、或运算
有1则取1,逻辑运算对应有true则true;
Pascal:or;
C++:|(逻辑运算则是||);
举例:
3|5=011|101=111=7;
因此,把某个二进制数某一位改成1,只需将这个数与当且仅当对应位为1的一个二进制数进行或运算;
3、异或运算:
相同取0,相反取1;
Pascal:xor;
C++:^;
举例:
3^5=011^101=110=6;
因此,异或可以比较两数是否相同或对一个数某些位进行翻转。
4、移位:
C++:
k<<i表示将k左移i位,k>>i表示将k右移i位;
如:1<<2=001<<2=100=4;100>>2=1;
4可以配合1、2,快速修改判断二进制的某一位。