십진수로 변환하지 않고 파이썬에서 이진수를 어떻게 더하고 빼고 비교할 수 있습니까?
십진수로 변환하지 않고 파이썬에서 이진수를 어떻게 더하고 빼고 비교할 수 있습니까?
답변:
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
바이너리가 무엇인지 혼란스러워하는 것 같습니다. 2 진법과 10 진법은 숫자의 다른 표현 일뿐입니다. 예를 들어 101 진법 2와 5 진법 10은 같은 숫자입니다. 더하기, 빼기 및 비교 연산은 숫자에 대해 작동합니다.-101 base 2 == 5 base 10 및 더하기는 작업중인 기본에 관계없이 동일한 논리 연산입니다. 파이썬 인터프리터가 내부적으로 항목을 바이너리로 저장할 수 있다는 사실은 작업 방식에 영향을주지 않습니다. 정수 유형이있는 경우 +,-등을 사용하십시오.
이진수 문자열이있는 경우 자체 구현을 작성하거나 int (binaryString, 2) 함수를 사용하여 변환해야합니다.
비트 연산자에 대해 이야기하고 있다면 다음과 같습니다.
~ Not
^ XOR
| Or
& And
그렇지 않으면 숫자는 어떻게 보든 숫자이기 때문에 이진수는 십진수와 정확히 동일하게 작동합니다. 십진법과 이진법의 유일한 차이점은 데이터를 볼 때 데이터를 표현하는 방법입니다.
'''
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)
바이너리가 무엇인지 혼란스러워하는 것 같습니다. 2 진법과 10 진법은 숫자의 다른 표현 일뿐입니다. 예를 들어 101 진법 2와 5 진법 10은 같은 숫자입니다. 더하기, 빼기 및 비교 연산은 숫자에 대해 작동합니다-101 base 2 == 5 base 10 및 더하기는 작업중인 기본에 관계없이 동일한 논리 연산입니다.