巧用位运算

移位运算

移位运算的方法

左移位

向左移位,在大多数编程语言中记作"<<",即将这个二进制位向左“移动”,移除相应的位数,然后将移除的位数在右边补0。 如:  25 << 2 = 100,即32位整数(若是8、16、64位整数):同理:0000 0000 0000 0000 0000 0000 00011 001  向左移动两位数,得0000 0000 0000 0000 0000 0000 011 00100 在不溢出的前提下,左移n位都相当于乘以2的n次方

右移位

向右移位,在大多数编程语言中记作">>",即将这个二进制位向右“移动”,移除相应的位数,然后将移除的位数在左边补0。 如:  25 >> 2 = 6 ,即32位整数(若是8、16、64位整数,同理):0000 0000 0000 0000 0000 0000 00011 001  向左移动两位数,0000 0000 0000 0000 0000 0000 0000 0110.

异或

此逻辑运算表示法为XOR,简单的说,就是判断两个布尔值是否不相同。若相同,则得真,否则返回假。 此运算方法可快速翻转一个数字的值,但有趣的是这个用法:
def swap(a, b):
    a = a ^ b
    b = b ^ a
    a = a ^ b
    return (a, b)

逐步分解:a = 二进制(10100010);b = 二进制(00000110)。

a = a ^ b,10100010 XOR 00000110 = 10100100
b = b ^ a,00000110 XOR 10100100 = 10100010
a = a ^ b,10100010 XOR 10100100 = 00000110

最后a = 二进制(00000110),b = 二进制(00000110),已经调换了位置,而不需要一个变量来储存临时值,可以提高效率、节省内存。


文章来源:http://biergaizi.info/archives/2012/09/1506.html

你可能感兴趣的:(巧用位运算)