1.位操作

计算机中使用01来存储数据,普通的操作数(+-等)至少也是以字节为单位,但是有的情况下不得不直接操作位或者要优化程序的性能,这时候位运算就体现出它的的强大了。位运算的效率要大大高于普通运算符,现代编译器在很多情况下对程序的优化也用到了位运算。这篇文章主要讲解  & | ~ ^这四种位运算。

2.从集合的角度看位操作

如果仅仅从位与位之间的关系来看位运算是很难真正理解位操作的,其实需要从集合的角度来看位操作,才能从本质上理解位操作。先让我们回顾一下位操作:

abc

 

让我从集合的角度来分析一下位操作,设a,b为两操作数,集合A为a中所有被置为1的位,B为b中所有被置为1的位,那么a&b即是A、B两个集合的交集,a|b即是A、B两个集合的并集,~a即是A的补集,a^b即是A、B两个集合中只属于A或只属于B的部分:

ab

a&b:a、b中同时为1的位才能被置1,其实就是A、B集合中的交集。

ab2

a|b:a、b相对应的位中只要至少有1个1结果中的位就能被置1,也就是A、B集合的并集。

ab4

~a:不用多说,就是A的补集。

ab3

a^b:a、b中相对应的位“相同为0,不同为1”,也就是说要找出a、b中所有置位情况不同的位,从集合上看,就是A、B的并集减去A、B的交集所剩下的部分。

知道了这些之后再去看位操作,就会有一种豁然开朗的感觉。另外,在集合操作中狄摩根定律十分重要,结合狄摩根定律就能灵活的使用位操作了。

3.实例

理解完上面的内容后再来看看CSAPP中的位操作实验

推算过程如下:

ab5

 

观看更多有关 的文章?

*

+
跳转到评论