携带python按位移位

时间:2013-10-09 21:15:40

标签: python

有没有办法让Python中的移位操作移位的位,比如x86汇编中的进位标志?

我搜索了python手册和互联网,但似乎找不到任何有用的东西。

我需要它来检查整数是奇数(CF = 1)还是偶数(CF = 0)并在一个命令中将其除以2。我知道我可以通过以下方式模仿预期的行为:

if x & 1==1: CF=1
else: CF=0

在我看来,这似乎是不必要的编码,或者我对python的期望很高。

1 个答案:

答案 0 :(得分:4)

在Python中,或者几乎在任何更高级别的语言中都没有“移位和返回进位标志”操作。即使在C语言中,y = x >> 1编译为您手动编写的完全相同的机器语言操作,并且您知道进位标志符合您的要求,无法访问它。

但是,自己很容易做到这一点。而不是:

rest = x>>1
cf = get_carry_flag()

...你这样做:

rest, cf = x>>1, x&1

它更紧凑 - 也可能更快。记住,这是Python; x>>1不是转换为单个位移操作码,而是转换为一个字节码序列,解释器通过调用一个函数来处理该字节码,该函数跟随指向表示任意长度整数的链表的指针并移位... < / p>


换向另一种方式,左移 没有溢出,所以你必须排除最后一位%。一旦你这样做,在丢弃它之前记住最高位并不是额外的负担。