Як я можу додавати, віднімати і порівнювати двійкові числа в Python без перетворення в десяткові?
Як я можу додавати, віднімати і порівнювати двійкові числа в 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
.
Я думаю, вас бентежить, що таке двійковий файл. Двійкові та десяткові - це просто різні подання числа - наприклад, 101 основа 2 та 5 база 10 - це одне і те ж число. Операції додавання, віднімання та порівняння оперують числами - 101 база 2 == 5 база 10 і додавання - це та сама логічна операція, незалежно від того, в якій базі ви працюєте. Той факт, що ваш інтерпретатор 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:]
'''
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 друк (x) a = x + 5 print (a)
Я думаю, вас бентежить, що таке двійковий файл. Двійкові та десяткові - це просто різні подання числа - наприклад, 101 основа 2 та 5 база 10 - це одне і те ж число. Операції додавання, віднімання та порівняння оперують числами - 101 база 2 == 5 база 10, і додавання - це та сама логічна операція, незалежно від того, в якій базі ви працюєте.