Python 整数位掩码,同时保持符号

问题描述 投票:0回答:1

我正在尝试在Python中复制/验证按位算术逻辑。 我遇到过绝对值中的位被截断(无论它们是 0 还是 1)而符号被保留的情况。这种情况发生在各种位长度表示中。 如何在 Python 中优雅地实现负整数的绝对值截断位?

对于正整数,我可以轻松应用位掩码:

n=7; nMod=n & 0b11; print(nMod) #truncate MSB
#expected and actual: 3

对于负整数它不起作用,可能是由于内部 2 的补码和可变的位数表示:

n=-7; nMod=n & 0b11; print(nMod)
#expected:-3; actual: 1

人们当然可以分析绝对值,确定哪些位实际上是“1”,并通过左右移动来删除它们,但我的愿望是像正数一样简单的单行。

python bit-manipulation
1个回答
0
投票

假设

n
是值,
mask
是掩码。您基本上需要做
sign(n)*(abs(n)&mask)
。要执行
sign(n)
,您可以这样做
(n>0)-(n<0)

所以这是一行,

def signed_masking(n, mask):
    return ((n>0)-(n<0))*(abs(n)&mask)
© www.soinside.com 2019 - 2024. All rights reserved.