Разное

Сложить числа двоичные: Сложение двоичных чисел онлайн

Способы представлений чисел в ЭВМ

Целые числа

Прямой код. Прямой код двоичного числа совпадает по изображению с записью самого числа. Значение знакового разряда для положительных чисел равно 0, а для отрицательных чисел 1.
Обратный код. Обратный код для положительного числа совпадает с прямым кодом. Для отрицательного числа все цифры числа заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд заносится единица.
Дополнительный код. Дополнительный код положительного числа совпадает с прямым кодом. Для отрицательного числа дополнительный код образуется путем получения обратного кода и добавлением к младшему разряду единицы.
В любом представлении старший бит определяет знак числа:
0 — положительное число;
1 — отрицательное число

Пример.

Для числа +1101:

Прямой код Обратный код Дополнительный код
0,0001101 0,0001101 0,0001101

Для числа -1101:

Прямой код Обратный код Дополнительный код
1,0001101 1,1110010 1,1110011

Вещественные числа (числа с плавающей точкой)

Все равные по абсолютному значению положительные и отрицательные числа отличаются только этим битом. В остальном числа с разным знаком полностью одинаковы. Для представления отрицательных чисел здесь не используется дополнительный код.
Поле мантиссы содержит мантиссу нормализованного числа.
Одинарная точность:
1.(цифры мантиссы)*2
(P-127)

Двойная точность:
1.(цифры мантиссы)*2(P-1023)
Расширенная точность:
1.(цифры мантиссы)*2(P-16383)

Перейти к онлайн решению своей задачи

Пример.
Запишите код действительного числа, интерпретируя его как величину типа Double.
а) 446,15625;
Переводим десятичное число в двоичное представление.


Целая часть от деления

Остаток от деления

446 div 2 = 223

446 mod 2 = 0

223 div 2 = 111

223 mod 2 = 1

111 div 2 = 55

111 mod 2 = 1

55 div 2 = 27

55 mod 2 = 1

27 div 2 = 13

27 mod 2 = 1

13 div 2 = 6

13 mod 2 = 1

6 div 2 = 3

6 mod 2 = 0

3 div 2 = 1

3 mod 2 = 1

1 div 2 = 0

1 mod 2 = 1

Остаток от деления записываем в обратном порядке. Получаем число в 2-ой системе счисления: 110111110
446 = 1101111102
Для перевода дробной части числа последовательно умножаем дробную часть на основание 2. В результате каждый раз записываем целую часть произведения.
0.15625*2 = 0.313 (целая часть
0
)
0.313*2 = 0.626 (целая часть 0)
0.626*2 = 1.252 (целая часть 1)
0.252*2 = 0.504 (целая часть 0)
0.504*2 = 1.008 (целая часть 1)
Получаем число в 2-ой системе счисления: 00101

0.15625 = 001012
446.15625 = 110111110,001012 = 1,1011111000101*28

Знак S = 0
Порядок P = 8 + 1023 = 103110 = 100000001112
Мантисса: 1011111000101
Для числа с двойной точностью мантисса занимает 52 разряда. Добавляем нули.
Мантисса: 1011 1110 0010 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000
Запишем число:
0 10000000111 1011 1110 0010 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000
В шестнадцатеричной системе счисления: 407BE2800000000016

б) -455,375.


Переводим десятичное число в двоичное представление.


Целая часть от деления

Остаток от деления

455 div 2 = 227

455 mod 2 = 1

227 div 2 = 113

227 mod 2 = 1

113 div 2 = 56

113 mod 2 = 1

56 div 2 = 28

56 mod 2 = 0

28 div 2 = 14

28 mod 2 = 0

14 div 2 = 7

14 mod 2 = 0

7 div 2 = 3

7 mod 2 = 1

3 div 2 = 1

3 mod 2 = 1

1 div 2 = 0

1 mod 2 = 1

Остаток от деления записываем в обратном порядке. Получаем число в 2-ой системе счисления: 111000111
455 = 1110001112
Для перевода дробной части числа последовательно умножаем дробную часть на основание 2. В результате каждый раз записываем целую часть произведения.
0.375*2 = 0.75 (целая часть 0)
0.75*2 = 1.5 (целая часть 1)
0.5*2 = 1 (целая часть 1)
0*2 = 0 (целая часть 0)
Получаем число в 2-ой системе счисления: 0110
0.375 = 01102

455,375 = 111000111,01102 = 1,110001110110*282

Знак S = 1
Порядок P = 8 + 1023 = 1031

10 = 100000001112
Мантисса: 1100 0111 0110 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
Запишем число:
1 10000000111 1100 0111 0110 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
В шестнадцатеричной системе счисления: -455,375 = C07C76000000000016

Дан код величины типа Double. Преобразуйте его число.
а) 408B894000000000;
Представим в двоичном коде:
010000001000 1011 1000 1001 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000
где
S = 0 (положительное число)
P = 100000010002 = 1032 – 1023 = 9
M = 10111000100101
N = 1,10111000100101
С учетом P = 9, N = 1101110001,00101

1101110001 = 29*1 + 28*1 + 27*0 + 26

*1 + 25*1 + 24*1 + 23*0 + 22*0+ 21*0 + 20*1 = 512 + 256 + 0 + 64 + 32 + 16 + 0 + 0 + 0 + 1 = 881

Для перевода дробной части необходимо разделить разряд числа на соответствующую ему степень разряда
00101 = 2-1*0 + 2-2*0 + 2-3*1 + 2-4*0 + 2-5*1 = 0.15625

Ответ: 881,15625

б) C089930000000000.
Представим в двоичном коде:
1 10000001000 100110010011000000000000000000000000 0000 0000 0000 0000
где
S = 1 (отрицательное число)
P = 100000010002 = 1032 – 1023 = 9
M = 100110010011
N =1,100110010011
С учетом P = 9, N = 1100110010,011

1100110010 = 29*1 + 28*1 + 27*0 + 26*0 + 25*1 + 24*1 + 23*0 + 22*0 + 21*1 + 2

0*0 = 512 + 256 + 0 + 0 + 32 + 16 + 0 + 0 + 2 + 0 = 818

Для перевода дробной части необходимо разделить разряд числа на соответствующую ему степень разряда
011 = 2-1*0 + 2-2*1 + 2-3*1 = 0. 375

Ответ: -818,375

Двоичная арифметика python — Stack Overflow на русском

Вопрос задан

Изменён 2 года 1 месяц назад

Просмотрен 9k раз

У меня следующее задание: реализовать двоичную арифметику (сложение, вычитание, сравнение) на python без библиотек. Я реализовал сложение следующим образом:

number1 = str(input("Введите первое число в 2ой системе: "))
number2 = str(input("Введите второе число в 2ой системе: "))
intSum = int(number1, 2) + int(number2, 2)
result = bin(intSum)[2:]
print(result)

Загвоздка в том, что мне дана подсказка: «генерировать число с 7,8 разрядов и каждое число записывать в массивы А и В». Что мне нужно переделать? Я совсем не понимаю, чего от меня хотят в подсказке

  • python
  • арифметика

вы не первый, кто сегодня хочет двоичную арифметику на питоне 🙂

на счет вопроса — вам же сказано — хранить число в массиве и работать с массивом чисел 0/1, а вы считили — строку перевели в число, а потом обратно в строку

нет уж — делайте все до конца как требуется

# получить бинарное число в виде массива чисел (бит)
num1 = [*map(int, input("Введите первое число в 2ой системе: "))]
num2 = [*map(int, input("Введите второе число в 2ой системе: "))]
# перевернуть числа для удобства выполнения операций
num1 = num1[::-1]
num2 = num2[::-1]
# дополнить числа нулями
size = max(len(num1), len(num2))
num1 += [0] * (size - len(num1))
num2 += [0] * (size - len(num2))
# сложить 2 числа
overflow = 0
res = []
for obj in zip(num1, num2):
    value = obj[0] + obj[1] + overflow
    overflow = value // 2
    res.
append(value % 2) # если флаг переполнения установлен - добавить бит в начало нового числа if overflow == 1: res.append(1) # перевернуть число назад res = res[::-1] print(''.join(map(str, res)))

5

От вас хотят чтобы вы сами рализовали операции в двоичной арифметике, а не преобразовали число средствами питон. Т.е. нужно хранить число побитово (именно об этом требование «записывать в массивы») и с числами в таком представлении уже оперировать.

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Программа Python для сложения двух двоичных чисел

Улучшить статью

Сохранить статью

  • Уровень сложности: Easy
  • Последнее обновление: 06 фев, 2023

  • Читать
  • Обсудить
  • Улучшить статью

    Сохранить статью

    Имея два двоичных числа, напишите программу на Python для вычисления их суммы.

    Примеры:

      Ввод:  a = "11", b = "1"
      Выход:  "100"
      Ввод:  а = "1101", б = "100"
      Вывод:  10001 

    Подход:

    • Наивный подход: Идея состоит в том, чтобы начать с последних символов двух строк и вычислять сумму цифр один за другим. Если сумма становится больше 1, сохраняем перенос для следующих цифр.
    • Использование встроенной функции: Вычислить результат с помощью встроенной функции bin() и int() .

    Метод 1: Наивный подход: 

    Идея состоит в том, чтобы начать с последних символов двух строк и последовательно вычислять сумму цифр. Если сумма становится больше 1, сохраняем перенос для следующих цифр.

    Python3

     

    a = "1101"

    b = "100"

    max_len = max ( лен (а), LEN (B))

    A = A. Zfill (MAX_LEN)

    B = .B.C.PILL (MAK = ''

    Перен на = 0

    для I в I в I (717171717171717171717171717171717171717171717171717.0071 , - 1 , - 1 ):

         r = carry

         r + = 1 if a[i] = = '1' else 0

         r + = 1 if b[i] = = '1' else 0

         result = ( '1' if r % 2 = = 1 else '0' ) + result

     

        

         carry = 0 если r < 2 иначе 1

     

    если нести! = 0 :

         result = '1' + result

     

    print (result. zfill(max_len))

    Выход

     10001 

    Временная сложность : O(n)

    Пространственная сложность : O(n)

    Метод 2: Используя встроенные функции: ) функция в питоне. Функция int() в Python и Python3 преобразует число в заданной системе счисления в десятичное. Затем мы добавим его, а затем снова преобразуем в двоичное число, используя функцию bin() .

    Example 1:

    Python3

     

    a = "1101"

    b = "100"

     

    sum = bin ( int (a, 2 ) + int (b, 2 ))

     

    print ( sum [ 2 :])

    Output

     10001 

    Example 2:

    Python3

     

    if __name__ = = "__main__" :

    a =

    A =

    A =

    A =

    A =

    A =

    "0072

         b = "100"

          

        

         binary_sum = lambda a,b : bin ( int (a, 2 ) + int (b, 2 ))

          

        

         print (binary_sum(a,b)[ 2 :])

          

        

    Output

     10001 

    Method: Using “add” operator 

    Python3

    from operator import *

    num1 = "1101"

    num2 = "100"

    print ( bin (add( int (num1, 2 ), int ( num2, 2 ))))

    Output 

     0b10001 

    Time complexity :  O(n)

    Space Complexity : O(1)


    Статьи по теме

    Часть B.

    Сложение двоичных чисел Часть B. Сложение двоичных чисел
    Следующий: Что сдать: Вверх: Без названия Предыдущий: Часть A — Манипулирование

    Если бы мы складывали вручную два двоичных числа, скажем, 1001 (это 9 в десятичном виде или с основанием 10). записи) и 1111 (это 15 в десятичной системе счисления), мы записывали их одну под другой, а затем складывали столбец за столбцом, начиная справа и сохраняя отслеживать то, что переносится в следующий столбец. Например, чтобы сложить 1001 и 1111, мы начинаем с 9.0660

    и добавьте крайний правый столбец. 1+1 равно 10 в двоичном формате (2 в десятичном), поэтому мы пишем вниз 0 и перенесите 1 в следующий столбец, чтобы получить

    Теперь добавляем вторую колонку справа. 1+0+1 равно 10 в двоичном формате (2 в десятичном), поэтому мы записываем 0 и переносим 1 в следующий столбец, чтобы получить

    Добавляем третий столбец с аналогичными результатами:

    Добавляя четвертый столбец, мы получаем 1+1+1 или 11 в двоичном виде (3 в десятичном), поэтому мы запишите 1 и несите 1, чтобы получить

    И теперь мы суммируем (новый) пятый столбец, чтобы получить окончательный ответ

    Обратите внимание, как это похоже на сложение двух десятичных чисел (с основанием 10). Для десятичные числа, мы по-прежнему добавляем столбец за столбцом, начиная справа. сумма двух цифр в столбце (плюс перенос из предыдущего столбец) находится между 0 и 19, поэтому мы записываем цифру от 0 до 9 и несите 0 или 1.

    Рассмотрите возможность использования строк 0 и 1 для представления двоичных чисел, например. "1001" для представления двоичного числа 1001 или "1111" для представления двоичного номер 1111.

    1. Напишите программу Тьюринга, которая принимает на вход две такие «двоичные строки», а затем выводит строка, представляющая их общее количество. Чтобы упростить задачу, убедитесь, что две входные строки имеют одинаковую длину. Вот как должен выглядеть результат запуска этой программы:
       Введите 2 двоичных числа в виде строк: "1001" "1111"
      Сумма двоичных чисел 1001 и 1111 равна 11000. 
      Убедитесь, что ваша программа работает с произвольными двоичными строками, а не только с теми, приведены в качестве примеров.
    2. После того, как программа из части 1 будет работать правильно, измените ее так, чтобы она повторялась запрашивает и принимает две строки и выводит их общее количество.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *