有没有办法让Python中的移位操作移位的位,比如x86汇编中的进位标志?
我搜索了python手册和互联网,但似乎找不到任何有用的东西。
我需要它来检查整数是奇数(CF = 1)还是偶数(CF = 0)并在一个命令中将其除以2。我知道我可以通过以下方式模仿预期的行为:
if x & 1==1: CF=1
else: CF=0
在我看来,这似乎是不必要的编码,或者我对python的期望很高。
答案 0 :(得分:4)
在Python中,或者几乎在任何更高级别的语言中都没有“移位和返回进位标志”操作。即使在C语言中,y = x >> 1
编译为您手动编写的完全相同的机器语言操作,并且您知道进位标志符合您的要求,无法访问它。
但是,自己很容易做到这一点。而不是:
rest = x>>1
cf = get_carry_flag()
...你这样做:
rest, cf = x>>1, x&1
它更紧凑 - 也可能更快。记住,这是Python; x>>1
不是转换为单个位移操作码,而是转换为一个字节码序列,解释器通过调用一个函数来处理该字节码,该函数跟随指向表示任意长度整数的链表的指针并移位... < / p>
换向另一种方式,左移 没有溢出,所以你必须排除最后一位%
。一旦你这样做,在丢弃它之前记住最高位并不是额外的负担。