Python中的二进制数


79

如何在Python中加,减和比较二进制数而不转换为小数?


1
这是一个家庭作业的问题吗,即您是否在问如何在较低的水平上做数学?参见(stackoverflow.com/questions/1149929/…)–
汤姆·莱伊斯

1
您能否举例说明您要达到的目标?
John La Rooy

8
python中的数字已经是二进制了。当您的程序启动时,它们会转换为二进制,而当您使用诸如str()或print之类的东西时,它们只会转换回十进制
John La Rooy

Answers:


138

您可以使用bin()和int()在二进制字符串表示形式之间进行转换

>>> bin(88)
'0b1011000'
>>> int('0b1011000', 2)
88
>>> 

>>> a=int('01100000', 2)
>>> b=int('00100110', 2)
>>> bin(a & b)
'0b100000'
>>> bin(a | b)
'0b1100110'
>>> bin(a ^ b)
'0b1000110'

谢谢。是的,这是一项家庭作业。作业指出,执行._add,._ sub,._ gt,._ lt和._eq时,我应该将数字保留为“二进制格式”。上面的示例似乎将bin转换为int。我不确定这是否可以接受,但是除了您的示例,我看不到其他任何方式。

7
使用Python 2.6及更高版本时,也可以使用二进制文字。例如,而不是int('01100111',2)您编写。0b01100111103
约书亚

9

我认为您对二进制是什么感到困惑。二进制和十进制只是数字的不同表示形式-例如,以101为底的2和以5为底的10是相同的数字。运算对数字的加,减和比较操作-101 base 2 == 5 base 10和加法是相同的逻辑运算,无论您使用的是什么基数。Python解释器可以在内部将内容存储为二进制的事实并没有不会影响您的使用方式-如果您使用的是整数类型,则只需使用+,-等。

如果您有二进制数字字符串,则必须编写自己的实现或使用int(binaryString,2)函数将其转换。


7

如果您在谈论按位运算符,那么您会:

~ Not
^ XOR
| Or
& And

否则,二进制数字的作用与十进制数字完全相同,因为无论您如何看,数字都是数字。十进制和二进制之间的唯一区别是查看数据时如何表示数据。


使用按位运算符编写add,sub等总是很有趣。对于对此感兴趣的任何人,请查找有关电路的指南,更具体地讲是半加法器,然后是全加法器,最后是减法器,甚至是加减法器。从这里可以将其转换为按位运算符。
Horse SMith

3

二进制,十进制,十六进制...基数仅在读取或输出数字时才重要,添加二进制数与添加十进制数相同:仅是表示形式。


0

下面是对以前发布的函数的重写:

def addBinary(a, b): # Example: a = '11' + b =' 100' returns as '111'.    
    for ch in a: assert ch in {'0','1'}, 'bad digit: ' + ch    
    for ch in b: assert ch in {'0','1'}, 'bad digit: ' + ch    
    sumx = int(a, 2) + int(b, 2)    
    return bin(sumx)[2:]

0
'''
I expect the intent behind this assignment was to work in binary string format.
This is absolutely doable.
'''

def compare(bin1, bin2):
    return bin1.lstrip('0') == bin2.lstrip('0')

def add(bin1, bin2):
    result = ''
    blen = max((len(bin1), len(bin2))) + 1
    bin1, bin2 = bin1.zfill(blen), bin2.zfill(blen)
    carry_s = '0'
    for b1, b2 in list(zip(bin1, bin2))[::-1]:
        count = (carry_s, b1, b2).count('1')
        carry_s = '1' if count >= 2 else '0'
        result += '1' if count % 2 else '0'
    return result[::-1]

if __name__ == '__main__':
    print(add('101', '100'))

我将减法函数留给读者练习。


-1

不确定是否有帮助,但我将解决方案留在这里:

class Solution:
    # @param A : string
    # @param B : string
    # @return a strings
    def addBinary(self, A, B):
        num1 = bin(int(A, 2))
        num2 = bin(int(B, 2))
        bin_str = bin(int(num1, 2)+int(num2, 2))
        b_index = bin_str.index('b')
        return bin_str[b_index+1:]

s = Solution()
print(s.addBinary("11", "100"))


-5

我认为您对二进制是什么感到困惑。二进制和十进制只是数字的不同表示形式-例如,以101为底的2和以5为底的10是相同的数字。运算对数字进行加,减和比较运算-101 base 2 == 5 base 10和加法是相同的逻辑运算,无论您使用的是哪种基数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.