在编程语言中,位运算是一种非常重要的功能。由于位运算是直接对二进制数进行操作,所以效率极高,必要的时候还可以完成一些奇怪的任务。我把最基础的应用整理了一下。
左移位
向左移位,在大多数编程语言中记作”<<“,即将这个二进制位向左“移动”,移除相应的位数,然后将移除的位数在右边补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.
在不溢出的前提下,右移n位都相当于除以2的n次方。
异或
此逻辑运算表示法为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),已经调换了位置,而不需要一个变量来储存临时值,可以提高效率、节省内存。
2012年09月05日 — 09:42
最后这个函数不错!
2012年09月06日 — 09:02
Python没有必要这么做——直接a, b = b, a就可以交换了,只是演示而已。P.S:学校电脑没有Linux几乎活不了,好在有MinGW和SSH。回头做一个LiveUSB。