[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'


답변

바이너리가 무엇인지 혼란스러워하는 것 같습니다. 2 진법과 10 진법은 숫자의 다른 표현 일뿐입니다. 예를 들어 101 진법 2와 5 진법 10은 같은 숫자입니다. 더하기, 빼기 및 비교 연산은 숫자에 대해 작동합니다.-101 base 2 == 5 base 10 및 더하기는 작업중인 기본에 관계없이 동일한 논리 연산입니다. 파이썬 인터프리터가 내부적으로 항목을 바이너리로 저장할 수 있다는 사실은 작업 방식에 영향을주지 않습니다. 정수 유형이있는 경우 +,-등을 사용하십시오.

이진수 문자열이있는 경우 자체 구현을 작성하거나 int (binaryString, 2) 함수를 사용하여 변환해야합니다.


답변

비트 연산자에 대해 이야기하고 있다면 다음과 같습니다.

~ Not
^ XOR
| Or
& And

그렇지 않으면 숫자는 어떻게 보든 숫자이기 때문에 이진수는 십진수와 정확히 동일하게 작동합니다. 십진법과 이진법의 유일한 차이점은 데이터를 볼 때 데이터를 표현하는 방법입니다.


답변

이진수, 십진수, 16 진수 … 밑수는 숫자를 읽거나 출력 할 때만 중요합니다. 이진수를 추가하는 것은 십진수를 추가하는 것과 같습니다. 단지 표현의 문제입니다.


답변

다음은 이전에 게시 된 함수를 다시 작성한 것입니다.

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:]


답변

'''
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"))