将十进制转换为二进制,掩码的算术

时间:2014-07-14 19:39:24

标签: math binary decimal masking

我正在接受两个参数,dwWidth和dwX%8。 dwWidth是我的数字是多少位宽,dwX%8是它开始的字节中的位置。所以,如果我有dwWidth = 3和dwX%8 = 0,那么我有111X XXXX。 ((注意:它可能不是1,我只是用它来演示,它可能等于5和10101,我们真正感兴趣的是掩蔽。))I想掩盖这些X点的内容。所以,我需要将这个3和0转换成一个0001 1111.但是,它需要是通用的,所以如果dwWidth = 4而dwX%8 = 3我会有XXX1 111X所以我需要从一个4和3得到1110 0001.这真的很难,如果可能的话,我无法弄明白。请记住,这需要算术,我可以使用开关轻松完成。

1 个答案:

答案 0 :(得分:0)

如果这个冗长的问题意味着我认为它意味着什么,那么你需要一个从位置dwWidth开始的dwX%8个连续位的掩码,其中0是最重要的位(谁放%在变量名中......)

def makeMask(width, start):
    out = (1 << width) - 1 # field of 1's 'width' wide
    out = out << (8 - start - width) # shift into the correct place
    return out

>>> x = makeMask(3, 0)
>>> format(x, '#010b')
'0b00011110'

那里,所有算术。