有什么方法可以让 Python 中的移位操作移出的位,比如 x86 程序集中的进位标志?
我搜索了python手册和互联网,但似乎找不到任何有用的东西。
我需要它来检查一个整数是奇数(CF=1)还是偶数(CF=0),并将其除以二合一命令。我知道我可以通过以下方式模仿预期的行为:
if x & 1==1: CF=1
else: CF=0
在我看来,这似乎是不必要的编码,或者我对 python 的期望很高。
有什么方法可以让 Python 中的移位操作移出的位,比如 x86 程序集中的进位标志?
我搜索了python手册和互联网,但似乎找不到任何有用的东西。
我需要它来检查一个整数是奇数(CF=1)还是偶数(CF=0),并将其除以二合一命令。我知道我可以通过以下方式模仿预期的行为:
if x & 1==1: CF=1
else: CF=0
在我看来,这似乎是不必要的编码,或者我对 python 的期望很高。
Python 中没有“移位并返回进位标志”操作——或者,实际上,几乎所有高级语言中都没有。即使在 C 语言中,y = x >> 1
编译成与您手动编写的完全相同的机器语言操作,并且您知道进位标志具有您想要的东西,也无法访问它。
但是,您自己很容易做到这一点。而不是这个:
rest = x>>1
cf = get_carry_flag()
… 你来做这件事:
rest, cf = x>>1, x&1
它更紧凑——也可能更快。记住,这是 Python;x>>1
不是转换为单个位移操作码,而是转换为解释器通过调用一个函数处理的字节码序列,该函数遵循指向表示任意长度整数的链表的指针并将其移位......</p>
对于另一种方式的移位,左移没有溢出,因此您必须专门关闭%
最高位。一旦你这样做了,在丢弃它之前记住最高位并没有太多额外的负担。
左移:
x,bit= x<<1, (x&128)>>7
右移:
x,bit= x>>1, x&1
每次执行时,都会得到高位或低位,并且“x”移位
>>> x=0x5a
>>>
>>>
>>> x,bit= x<<1, (x&128)>>7; bit 0
>>> x,bit= x<<1, (x&128)>>7; bit 1
>>> x,bit= x<<1, (x&128)>>7; bit 0
>>> x,bit= x<<1, (x&128)>>7; bit 1
>>> x,bit= x<<1, (x&128)>>7; bit 1
>>> x,bit= x<<1, (x&128)>>7; bit 0
>>> x,bit= x<<1, (x&128)>>7; bit 1
>>> x,bit= x<<1, (x&128)>>7; bit 0