巧用位运算

在编程语言中,位运算是一种非常重要的功能。由于位运算是直接对二进制数进行操作,所以效率极高,必要的时候还可以完成一些奇怪的任务。我把最基础的应用整理了一下。

左移位

向左移位,在大多数编程语言中记作”<<“,即将这个二进制位向左“移动”,移除相应的位数,然后将移除的位数在右边补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),已经调换了位置,而不需要一个变量来储存临时值,可以提高效率、节省内存。

分类目录: IT生活, 代码如诗

2 评论

  1. 最后这个函数不错!

    • Python没有必要这么做——直接a, b = b, a就可以交换了,只是演示而已。P.S:学校电脑没有Linux几乎活不了,好在有MinGW和SSH。回头做一个LiveUSB。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

版权所有 © 2025 比尔盖子 博客

主题设计 Anders Noren返回顶部 ↑