位运算基础

来源:互联网 发布:apache ab post请求 编辑:程序博客网 时间:2024/05/29 09:13

首先谈谈位运算与逻辑运算的区别:尽管它们有一些相似之处,但针对的对象是不同的,位运算是对二进制数之间的运算,而逻辑运算是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,快速修改判断二进制的某一位。