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

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

Теория

Двоичная система счисления — позиционная система счисления с основанием 2.

Числа записываются при помощи двух символов 0 и 1.

Правила сложения двоичных чисел:

1+1=2(10)=10(2), 1+1=10
0+1=1 и 1+0=1
0+0=0

Рассмотрим пример сложения двух двоичных чисел 1011 и 0011.

Как и при сложении десятичных чисел в столбик начинаем считать с последнего разряда.

1+1=2(10)=10(2)

Значит, записываем 0, а следующий разряд увеличивается на 1.

1+1+1(из предыдущего шага)=3(10)=11(2)

Записываем 1, а следующий разряд увеличивается на 1.

0+0+1(из предыдущего шага)=1

Записываем 1.

1+0=1

Записываем 1.

C++

Пример программы на C++, которая выполняет сложение двоичных чисел:

#include <iostream>
#include <string>
using namespace std;

// Функция для сложения двух двоичных чисел в виде строк
string binaryAddition(string binary1, string binary2) {
    int carry = 0;
    string result = "";

    // Выравниваем двоичные числа по длине, добавляя в начало нули, если необходимо
    while (binary1.length() < binary2.length())
        binary1 = "0" + binary1;
    while (binary2.length() < binary1.length())
        binary2 = "0" + binary2;

    int length = binary1.length();

    // Начинаем сложение с конца строк
    for (int i = length - 1; i >= 0; i--) {
        int bit1 = binary1[i] - '0';
        int bit2 = binary2[i] - '0';

        int sum = bit1 + bit2 + carry;

        // Если сумма равна 2 или 3, то устанавливаем перенос в 1
        carry = sum / 2;

        // Добавляем бит суммы к результату
        result = char(sum % 2 + '0') + result;
    }

    // Если остался перенос, добавляем его к результату
    if (carry)
        result = "1" + result;

    return result;
}

int main() {
    string binary1, binary2;

    cout << "Введите первое двоичное число: ";
    cin >> binary1;

    cout << "Введите второе двоичное число: ";
    cin >> binary2;

    string sum = binaryAddition(binary1, binary2);

    cout << "Результат сложения: " << sum << endl;

    return 0;
}
1

Это решение было полезно?

Эта программа позволяет пользователю ввести два двоичных числа в виде строк, затем выполняет их сложение и выводит результат на экран.

C#

using System;

class BinaryAddition
{
    static string AddBinaryStrings(string binary1, string binary2)
    {
        int maxLength = Math.Max(binary1.Length, binary2.Length);
        char[] result = new char[maxLength + 1]; // +1 for possible carry

        int carry = 0;

        for (int i = 0; i < maxLength; i++)
        {
            int bit1 = (i < binary1.Length) ? binary1[binary1.Length - 1 - i] - '0' : 0;
            int bit2 = (i < binary2.Length) ? binary2[binary2.Length - 1 - i] - '0' : 0;

            int sum = bit1 + bit2 + carry;
            result[maxLength - i] = (sum % 2).ToString()[0];
            carry = sum / 2;
        }

        if (carry > 0)
            result[0] = '1';

        return new string(result);
    }

    static void Main()
    {
        Console.Write("Введите первое двоичное число: ");
        string binary1 = Console.ReadLine();

        Console.Write("Введите второе двоичное число: ");
        string binary2 = Console.ReadLine();

        string sum = AddBinaryStrings(binary1, binary2);

        Console.WriteLine("Результат сложения: " + sum);
    }
}
0

Это решение было полезно?

Python

def binary_addition(binary1, binary2):
    max_len = max(len(binary1), len(binary2))
    binary1 = binary1.zfill(max_len)  # Дополняем первое число нулями до максимальной длины
    binary2 = binary2.zfill(max_len)  # Дополняем второе число нулями до максимальной длины

    carry = 0
    result = []

    for i in range(max_len - 1, -1, -1):
        bit1 = int(binary1[i])
        bit2 = int(binary2[i])

        # Вычисляем сумму текущих битов и переноса
        bit_sum = bit1 + bit2 + carry

        # Определяем текущий бит результата и обновляем перенос
        result.insert(0, str(bit_sum % 2))
        carry = bit_sum // 2

    if carry:
        result.insert(0, '1')

    return ''.join(result)

# Ввод двоичных чисел от пользователя
binary1 = input("Введите первое двоичное число: ")
binary2 = input("Введите второе двоичное число: ")

sum_binary = binary_addition(binary1, binary2)

print("Результат сложения: " + sum_binary)
0

Это решение было полезно?

Java

import java.util.Scanner;

public class BinaryAddition {
    public static String addBinary(String binary1, String binary2) {
        int maxLength = Math.max(binary1.length(), binary2.length());
        StringBuilder result = new StringBuilder();
        int carry = 0;

        // Дополняем двоичные числа нулями до одинаковой длины
        binary1 = String.format("%" + maxLength + "s", binary1).replace(' ', '0');
        binary2 = String.format("%" + maxLength + "s", binary2).replace(' ', '0');

        // Складываем биты справа налево
        for (int i = maxLength - 1; i >= 0; i--) {
            int bit1 = binary1.charAt(i) - '0';
            int bit2 = binary2.charAt(i) - '0';
            int sum = bit1 + bit2 + carry;

            result.insert(0, sum % 2);
            carry = sum / 2;
        }

        if (carry == 1) {
            result.insert(0, '1');
        }

        return result.toString();
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Введите первое двоичное число: ");
        String binary1 = scanner.nextLine();

        System.out.print("Введите второе двоичное число: ");
        String binary2 = scanner.nextLine();

        String sum = addBinary(binary1, binary2);

        System.out.println("Результат сложения: " + sum);
    }
}
0

Это решение было полезно?

Pascal

program BinaryAddition;

var
  binary1, binary2, sum, result: string;
  carry, bit1, bit2, bitSum: integer;
  maxLength, i: integer;

begin
  write('Введите первое двоичное число: ');
  readln(binary1);
  
  write('Введите второе двоичное число: ');
  readln(binary2);

  maxLength := max(length(binary1), length(binary2));
  binary1 := copy('00000000000000000000000000000000', 1, maxLength - length(binary1)) + binary1;
  binary2 := copy('00000000000000000000000000000000', 1, maxLength - length(binary2)) + binary2;
  
  carry := 0;
  result := '';
  
  for i := maxLength downto 1 do
  begin
    bit1 := ord(binary1[i]) - ord('0');
    bit2 := ord(binary2[i]) - ord('0');
    
    bitSum := bit1 + bit2 + carry;
    result := chr(bitSum mod 2 + ord('0')) + result;
    
    carry := bitSum div 2;
  end;
  
  if carry = 1 then
    result := '1' + result;
  
  writeln('Результат сложения: ', result);
end.

обратите внимание, что в Pascal индексация символов начинается с 1, и мы используем ord для преобразования символов ‘0’ и ‘1’ в целые числа и chr для преобразования результата обратно в символы.

0

Это решение было полезно?

JavaScript

function addBinary(binary1, binary2) {
    const maxLength = Math.max(binary1.length, binary2.length);
    binary1 = binary1.padStart(maxLength, '0'); // Дополняем первое число нулями до максимальной длины
    binary2 = binary2.padStart(maxLength, '0'); // Дополняем второе число нулями до максимальной длины

    let carry = 0;
    let result = '';

    for (let i = maxLength - 1; i >= 0; i--) {
        const bit1 = parseInt(binary1[i], 10);
        const bit2 = parseInt(binary2[i], 10);
        const sum = bit1 + bit2 + carry;

        result = (sum % 2) + result;
        carry = Math.floor(sum / 2);
    }

    if (carry > 0) {
        result = '1' + result;
    }

    return result;
}

const binary1 = prompt("Введите первое двоичное число: ");
const binary2 = prompt("Введите второе двоичное число: ");

const sum = addBinary(binary1, binary2);

console.log("Результат сложения: " + sum);
0

Это решение было полезно?

PHP

<?php
function addBinary($binary1, $binary2) {
    $maxLength = max(strlen($binary1), strlen($binary2));
    $binary1 = str_pad($binary1, $maxLength, '0', STR_PAD_LEFT); // Дополняем первое число нулями до максимальной длины
    $binary2 = str_pad($binary2, $maxLength, '0', STR_PAD_LEFT); // Дополняем второе число нулями до максимальной длины

    $carry = 0;
    $result = '';

    for ($i = $maxLength - 1; $i >= 0; $i--) {
        $bit1 = (int)$binary1[$i];
        $bit2 = (int)$binary2[$i];
        $sum = $bit1 + $bit2 + $carry;

        $result = ($sum % 2) . $result;
        $carry = (int)($sum / 2);
    }

    if ($carry > 0) {
        $result = '1' . $result;
    }

    return $result;
}

$binary1 = readline("Введите первое двоичное число: ");
$binary2 = readline("Введите второе двоичное число: ");

$sum = addBinary($binary1, $binary2);

echo "Результат сложения: " . $sum . PHP_EOL;
?>
0

Это решение было полезно?

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Давайте поможем друг другу! Если вы нашли ошибку или хотите предложить лучшее решение, пожалуйста, напишите об этом в комментариях.

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

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