python按位移位的进位

python按位移位的进位,python,Python,是否有任何方法可以通过Python中的移位操作(如x86汇编中的进位标志)来获得移位的位 我搜索了python手册和互联网,但似乎找不到任何有用的东西 我需要它检查一个整数是奇数(CF=1)还是偶数(CF=0),并在一个命令中将其除以2。我知道我可以通过以下方式模仿预期行为: if x & 1==1: CF=1 else: CF=0 在我看来,这似乎是不必要的编码,或者我对python有很大的期望。在python中,或者实际上,在几乎任何更高级的语言中,都没有“shift和return

是否有任何方法可以通过Python中的移位操作(如x86汇编中的进位标志)来获得移位的位

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

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

if x & 1==1: CF=1
else: CF=0
在我看来,这似乎是不必要的编码,或者我对python有很大的期望。

在python中,或者实际上,在几乎任何更高级的语言中,都没有“shift和return-carry-flag”操作。即使在C语言中,
y=x>>1
编译成与您手动编写的完全相同的机器语言op,并且您知道进位标志包含您想要的内容,也无法访问它

然而,这是很容易做到这一点自己。与此相反:

rest = x>>1
cf = get_carry_flag()
…您可以这样做:

rest, cf = x>>1, x&1
它更紧凑,可能也更快。记住,这是Python
x>>1
不是转换成一个位移位操作码,而是转换成一个字节码序列,解释器通过调用一个函数来处理该字节码序列,该函数位于表示任意长度整数的链表指针之后,并移位到


对于另一种方式的移位,左移位没有溢出,因此必须将顶部位排他地
%
。一旦这样做了,在丢弃前记住最上面的一位就不会有太多额外的负担。

在Python或几乎任何更高级的语言中都没有“shift和return-carry-flag”操作。即使在C语言中,
y=x>>1
编译成与您手动编写的完全相同的机器语言op,并且您知道进位标志包含您想要的内容,也无法访问它

然而,这是很容易做到这一点自己。与此相反:

rest = x>>1
cf = get_carry_flag()
…您可以这样做:

rest, cf = x>>1, x&1
它更紧凑,可能也更快。记住,这是Python
x>>1
不是转换成一个位移位操作码,而是转换成一个字节码序列,解释器通过调用一个函数来处理该字节码序列,该函数位于表示任意长度整数的链表指针之后,并移位到



对于另一种方式的移位,左移位没有溢出,因此必须将顶部位排他地
%
。一旦你这样做了,在丢弃前记住最上面的部分就不会有太多额外的负担。

还有
CF=x&1
有什么问题吗?哦…,我没想到。呜呜声。尽管如此,它还是感觉应该自动与移位指令配合使用。我现在在汇编编程中已经习惯了它,以至于我忍不住认为它应该已经在状态标志中的某个地方了。在Python中,您不经常使用位字段,但是当您使用时,看到像
rest,cf=x>>1,x&1
这样的代码并不是那么意外;是的,我对python=P抱有很大期望。@Erik:我想你可以这么说。但你错了,它可能已经在某个状态标志中了。对于像C这样的中级语言,这一点很可能是肯定的,但对于大多数Python实现来说,这可能永远不会是真的。而
CF=x&1
又有什么问题呢?哦…,我没有想到这一点。呜呜声。尽管如此,它还是感觉应该自动与移位指令配合使用。我现在在汇编编程中已经习惯了它,以至于我忍不住认为它应该已经在状态标志中的某个地方了。在Python中,您不经常使用位字段,但是当您使用时,看到像
rest,cf=x>>1,x&1
这样的代码并不是那么意外;是的,我对python=P抱有很大期望。@Erik:我想你可以这么说。但你错了,它可能已经在某个状态标志中了。对于像C这样的中级语言,这一点很可能是肯定的,但对于大多数Python实现来说,这可能永远不会是真的。