如何在Python中对二进制数进行加、减和比较,而不需要将它们转换为十进制?
你可以使用 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'
int('01100111',2)
替换为0b01100111
,它的值仍然是103
。请注意,这种替换方法不会改变原始含义,同时使语句更加简洁易懂。 - Joschua我认为你对二进制的概念有些混淆。二进制和十进制只是数字的不同表示法 - 比如说,基于2的101和基于10的5是相同的数字。加、减和比较操作都是对数字进行操作 - 基于2的101等于基于10的5,无论在哪种进制下进行加法操作都是相同的逻辑操作。即使你的Python解释器内部可能以二进制形式存储事物,这也不会影响你的使用方式 - 如果你有一个整数类型,就可以使用+、-等运算符。
如果你有二进制数字的字符串,你必须要自己编写实现或者使用int(binaryString, 2)函数进行转换。
~ Not
^ XOR
| Or
& And
二进制、十进制、十六进制...在读取或输出数字时,进制只是表示的一种方式,将二进制数相加与将十进制数相加没有区别。
以下是之前发布的函数的重写:
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:]
int(a, 2)
并处理抛出的 ValueError
异常 (如果值为无效二进制)。或者省略异常处理并让它们被引发。如果从您的代码中删除验证步骤,并调用 addBinary('113', '100')
,则结果是...回溯(最近的调用最先): 文件 "<stdin>",第 1 行,在 <module> 中 文件 "<stdin>",第 2 行,在 addBinary 中 ValueError:"invalid literal for int() with base 2: '113'"与
AssertionError
类似,但不太具体。 - Mr. Lance E Sloan'''
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'))
我把减法函数留给读者作为练习。
不确定是否有帮助,但我在这里留下我的解决方案:
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"))
x = x + 1 print(x) a = x + 5 print(a)
代码如上所示。
我认为你对二进制的理解有些混淆。二进制和十进制只是数字的不同表示方式 - 例如,101(二进制)和5(十进制)是同一个数字。加、减和比较操作都是针对数字进行的 - 101(二进制)等于5(十进制),而加法在任何进制下都是相同的逻辑操作。