比尔盖子 博客

巧用位运算

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

左移位

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

Categories: IT生活, 代码如诗

优雅地使用Windows XP —— 安装原版系统并搭建开发环境 » « Python比C快1000倍?

2 Comments

  1. 最后这个函数不错!

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

发表评论

Your email address will not be published.

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

Copyright © 2023 比尔盖子 博客

Theme by Anders NorenUp ↑