在python中使二进制数成为它的“反面”

2024-09-27 21:35:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图列出一个二进制数,并显示它们的“对立”,我把这个词放在引号里,因为我不确定这是否是描述我意思的最佳方式。在

board=[1,10,101]

我想做一个函数来显示这些数的反义词的补码,如下所示:

^{pr2}$

基本上是把0换成1,把1换成0。因为它们是整数,所以我不能遍历每个二进制数并手动更改值,所以我尝试使用two的恭维,但这在语义上并没有达到我想要的效果。有人知道怎么做的函数吗,或者这个过程叫什么?谢谢!在


Tags: 函数board过程方式二进制整数手动引号
3条回答

我相信你所指的是补数,你是在试图颠倒二进制数的位数。最自然的做法是使用XOR运算符。 考虑以下代码:

get_bin = lambda x: format(x, 'b')
def Complement_binary(x):
    complemented = []
    for num in x:
        i = 1
        while i <= num:
            i = i << 1
        complemented.append(get_bin((i - 1) ^ num))
    return complemented

Complement_binary函数接收一个数字列表,并返回一个以字符串形式表示的数字列表(get_bin将数字转换为字符串中的二进制数字)。如果不需要字符串,可以删除complemented.append(get_bin((i - 1) ^ num))中的get_bin函数。

get_bin函数的源代码:https://stackoverflow.com/a/21732313/6833761作者@Martin Thoma

你不能把[0,01,010]存储在一个列表中,因为它变成了[0,1,10],但是你可以使用字符串

def reverse_binary(input):
    reversed = []
    for x in [list(str(x)) for x in input]:
        reversed.append(''.join(['%s' % (int(x) ^ 1) for x in x]))
    return reversed


if __name__ == '__main__':
    print(reverse_binary([1, 10, 101]))

你能用字符串来表示你的二进制数吗?然后您可以简单地执行以下操作:

opposite = { '0':'1', '1':'0'}
board=['1', '10', '101']
newboard = [''.join([opposite[c] for c in n]) for n in board]

相关问题 更多 >

    热门问题