代码改变世界

位运算的使用和一些技巧

2014-08-26 10:59  cmLighters  阅读(221)  评论(0编辑  收藏  举报

位运算有以下几种:~ & ^ |,为 按位取反 按位与 按位异或 按位或,优先级从左到右依次降低。

按位与运算有两种典型用法,一是取一个位串信息的某几位,如以下代码截取x的最低7位:x & 0177。二是让某变量保留某几位,其余位置0,如以下代码让x只保留最低6位:x = x & 077。

按位或运算的典型用法是将一个位串信息的某几位置为1。如将要获得最右4位为1,其他位与变量j原来其他位保持相同,可用逻辑或运算017|j;

按位异或运算的典型用法是求一个位串信息的某几位信息的反。如欲求整型变量j的最右4位信息的反,用逻辑异或运算017^j,就能求得j最右4位的信息的反,即原来为1的位,结果是0,原来为0的位,结果是1。 异或运算在解一些问题时特别有用。 具体异或有如下性质: 0 ^ x = x, 1 ^ x = ~x。

异或的最常用例子就是运用x^x = 0 这个性质。如交换两个值,不允许用临时变量,该如何解决。

解:假设a = 3, b = 5。 则 可用如下三个等式完成: a = a ^ b, b = a ^ b, a = a ^ b.   三个语句完成后a和b数值交换。

 

利用位操作命令可以非常紧凑地存储布尔值

而布尔值为0和1刚好是bit位的值,因此微操作可以紧凑存储一堆有共性的值。