Как переводить отрицательные числа в двоичную систему

Как переводить отрицательные числа в двоичную систему

Перевод дробных чисел из одной системы счисления в другую

После того, как я сделал несколько калькуляторов для перевода между разными системами счисления — вот список от первой до последней версии, от самого простого к сложному: Перевод числа в другие системы счисления, Перевод из десятичной системы счисления, Перевод из одной системы счисления в другую — в комментариях стали периодически спрашивать — а что же, мол, дробные числа, как же их переводить? И когда спросили больше трех раз, я таки решил изучить этот вопрос.

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

Перевод дробных чисел из одной системы счисления в другую

Теперь теория. Я, честно говоря, думал, что вопрос довольно сложный, но при ближайшем рассмотрении все оказалось проще простого. Надо было только держать в голове тот факт, что речь идет о позиционных системах счисления.
В чем тут суть? Рассмотрим на примере десятичного числа 6.125. Это дробное число в десятичной системе счисления представляется так:

Все просто, не так ли? Та же самая простота сохраняется и при записи дробного числа в любой другой системе счисления. Возьмем, например, горячо любимую каждым программистом двоичную систему и число, например, 110.001. Эта запись есть не что иное как

Да-да, число для примера было выбрано не просто так. То есть, 110.001 в двоичной системе есть 6.125 в десятичной. Принцип, я думаю, ясен.

Есть только одно но — все-таки из-за того, что здесь участвую дроби с разными знаменателями, не всегда одно и тоже число можно одинаково точно выразить в разных системах счисления. Что я имею в виду?

Возьмем, например, число . Отлично смотрится в десятичной системе счисления. Но вот если попробовать получить запись этого числа в двоичной системе счисления — будут проблемы. Попробуем, пока не устанем

Продолжать можно еще довольно долго, но уже сейчас видно, что 0.8 в десятичной системе это 0.11001100. (дальше очень много цифр) в двоичной. Если честно, то это периодическое число с перидом 1100, так что мы никогда не сможем выразить его точно в двоичной системе счисления. 110011001100. будет продолжаться до бесконечности.

Поэтому перевод дробного числа из одной системы счисления в другую чаще всего дает погрешность. Погрешность эта зависит от того, сколько разрядов мы используем для записи дробной части переведенного числа. Возьмем пример с числом 0.8 и используем для записи его двоичного представления шесть разрядов после запятой — 0.110011. Полученное число вовсе не 0.8, а 0.796875, разница при этом составляет 0.003125. Это и есть наша погрешность перевода десятичного числа 0.8 в двоичный вид при использовании шести разрядов после запятой.

Вес крайнего правого разряда (самого младшего разряда) называется разрешением (resolution) или точностью (precision), и определяет наименьшее неравное нулю число, которое может быть представлено данным числом разрядов. Для нашего примера это . При этом максимально возможная погрешность представления числа, как нетрудно сообразить, не превышает половины этого веса, или 0.0078125. Так что для 0.8 мы имеем еще и не самую плохую погрешность.

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

Прямой, дополнительный и обратный код числа (создан по запросу).

Запись положительных и отрицательных целых чисел в памяти компьютера

Далее идет калькулятор, который переводит введенное положительное или отрицательное целое число в двоичный код, а также выводит обратный код этого числа и его дополнительный код. Под калькулятором, как водится, немного теории.

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

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

Прямой код числа это представление беззнакового двоичного числа. Если речь идет о машинной арифметике, то как правило на представление числа отводится определенное ограниченное число разрядов. Диапазон чисел, который можно представить числом разрядов n равен

Обратный код числа, или дополнение до единицы (one’s complement) это инвертирование прямого кода (поэтому его еще называют инверсный код). То есть все нули заменяются на единицы, а единицы на нули.

Дополнительный код числа, или дополнение до двойки (two’s complement) это обратный код, к младшему значащему разряду которого прибавлена единица

А это все для удобной работы со знаками. Поскольку я все люблю понимать на примерах, рассказывать я тоже буду на примерах. Итак, предположим, что у нас 4 разряда для работы с двоичными числами. Представить таким образом можно 16 чисел — 0, 1, . 15
00 — 0000
.
15 — 1111

Но если нет знака, убогая получается арифметика. Нужно вводить знак. Чтобы никого не обидеть, половину диапазона отдадим положительным числам (8 чисел), половину — отрицательным (тоже 8 чисел). Ноль, что отличает машинную арифметику от обычной, мы отнесем в положительные числа (в обычной арифметике у нуля нет знака, если не ошибаюсь). Итого, в положительные числа попадают 0. 7, а в отрицательные -1, . -8.

Для различия положительных и отрицательных чисел выделяют старший разряд числа, который называется знаковым (sign bit)
0 в этом разряде говорит нам о том, что это положительное число, а 1 — отрицательное.

С положительными числами все вроде бы понятно, для их представления можно использовать прямой код
0 — 0000
1 — 0001
7 — 0111

А как представить отрицательные числа?

Вот для их представления как раз и используется дополнительный код.
То есть, -7 в дополнительном коде получается так
прямой код 7 = 0111
обратный код 7 = 1000
дополнительный код 7 = 1001

Обратим внимание на то, что прямой код 1001 представляет число 9, которое отстоит от числа -7 ровно на 16, или .
Или, что тоже самое, дополнительный код числа «дополняет» прямой код до , т.е. 7+9=16

И это оказалось очень удобно для машинных вычислений — при таком представлении отрицательного числа операции сложения и вычитания можно реализовать одной схемой сложения, при этом очень легко определять переполнение результата (когда для представления получившегося числа не хватает разрядности)

Пара примеров
7-3=4
0111 прямой код 7
1101 дополнительный код 3
0100 результат сложения 4

-1+7=6
1111 дополнительный код 1
0111 прямой код 7
0110 результат сложения 6

Что касается переполнения — оно определяется по двум последним переносам, включая перенос за старший разряд. При этом если переносы 11 или 00, то переполнения не было, а если 01 или 10, то было. При этом, если переполнения не было, то выход за разряды можно игнорировать.

Примеры где показаны переносы и пятый разряд

00111 прямой код 7
00001 прямой код 1
01110 переносы
01000 результат 8 — переполнение

Два последних переноса 01 — переполнение

-7+7=0
00111 прямой код 7
01001 дополнительный код 7
11110 переносы
10000 результат 16 — но пятый разряд можно игнорировать, реальный результат 0

Два последних переноса 11 з перенос в пятый разряд можно отбросить, оставшийся результат, ноль, арифметически корректен.
Опять же проверять на переполнение можно простейшей операцией XOR двух бит переносов.

Вот благодаря таким удобным свойствам дополнительный код это самый распространенный способ представления отрицательных чисел в машинной арифметике.

Способы перевода чисел из одной системы счисления в другую

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

Как переводить отрицательные числа в двоичную систему

Например, нужно перевести число 81010 в двоичную систему:

Результат записываем в обратном порядке снизу вверх. Получается 81010 = 11001010102

Если нужно переводить в двоичную систему довольно большие числа, то лестница делений приобретает размер многоэтажного дома. И как тут собрать все единички с нулями и ни одной не пропустить?

В программу ЕГЭ по информатике входят несколько задач, связанных с переводом чисел из одной системы в другую. Как правило, это преобразование между 8- и 16-ричными системами и двоичной. Это разделы А1, В11. Но есть и задачи с другими системами счисления, как например, в разделе B7.

Для начала напомним две таблицы, которые хорошо бы знать наизусть тем, кто выбирает информатику своей дальнейшей профессией.

Таблица степеней числа 2:

2 12 22 32 42 52 62 72 82 92 10
2481632641282565121024

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

Таблица двоичных чисел от 0 до 15 c 16-ричным представлением:

0123456789101112131415
0000000100100011010001010110011110001001101010111100110111101111
0123456789ABCDEF

Недостающие значения тоже нетрудно вычислить, прибавляя по 1 к известным значениям.

Перевод целых чисел

Итак, начнем с перевода сразу в двоичную систему. Возьмём то же число 81010. Нам нужно разложить это число на слагаемые, равные степеням двойки.

  1. Ищем ближайшую к 810 степень двойки, не превосходящую его. Это 2 9 = 512.
  2. Вычитаем 512 из 810, получаем 298.
  3. Повторим шаги 1 и 2, пока не останется 1 или 0.
  4. У нас получилось так: 810 = 512 + 256 + 32 + 8 + 2 = 2 9 + 2 8 + 2 5 + 2 3 + 2 1 .

Способ 1: Расставить 1 по тем разрядам, какие получились показатели у слагаемых. В нашем примере это 9, 8, 5, 3 и 1. В остальных местах будут стоять нули. Итак, мы получили двоичное представление числа 81010 = 11001010102 . Единицы стоят на 9-м, 8-м, 5-м, 3-м и 1-м местах, считая справа налево с нуля.

Способ 2: Распишем слагаемые как степени двойки друг под другом, начиная с большего.

2 9 =1000000000(1 и девять нулей) +
2 8 =100000000(1 и восемь нулей) +
2 5 =100000(1 и пять нулей) +
2 3 =1000(1 и три нуля) +
2 1 =10(1 и один ноль)

А теперь сложим эти ступеньки вместе, как складывают веер: 1100101010 .

Вот и всё. Попутно также просто решается задача «сколько единиц в двоичной записи числа 810?».

Ответ — столько, сколько слагаемых (степеней двойки) в таком его представлении. У 810 их 5.

Теперь пример попроще.

Переведём число 63 в 5-ричную систему счисления. Ближайшая к 63 степень числа 5 — это 25 (квадрат 5). Куб (125) будет уже много. То есть 63 лежит между квадратом 5 и кубом. Тогда подберем коэффициент для 5 2 . Это 2.

Получаем 6310 = 50 + 13 = 50 + 10 + 3 = 2 * 5 2 + 2 * 5 + 3 = 2235 .

Ну и, наконец, совсем лёгкие переводы между 8- и 16-ричными системами. Так как их основанием является степень двойки, то перевод делается автоматически, просто заменой цифр на их двоичное представление. Для 8-ричной системы каждая цифра заменяется тремя двоичными разрядами, а для 16-ричной четырьмя. При этом все ведущие нули обязательны, кроме самого старшего разряда.

Переведем в двоичную систему число 5478.

5478=101100111
547

Ещё одно, например 7D6A16.

7D6A16=(0)111110101101010
7D6A

Переведем в 16-ричную систему число 7368. Сначала цифры запишем тройками, а потом поделим их на четверки с конца: 7368 = 111 011 110 = 1 1101 1110 = 1DE16 . Переведем в 8-ричную систему число C2516. Сначала цифры запишем четвёрками, а потом поделим их на тройки с конца: C2516 = 1100 0010 0101 = 110 000 100 101 = 60458 . Теперь рассмотрим перевод обратно в десятичную. Он труда не представляет, главное не ошибиться в расчётах. Раскладываем число на многочлен со степенями основания и коэффициентами при них. Потом всё умножаем и складываем. E6816 = 14 * 16 2 + 6 * 16 + 8 = 3688 . 7328 = 7 * 8 2 + 3*8 + 2 = 474 .

Перевод отрицательных чисел

Здесь нужно учесть, что число будет представлено в дополнительном коде. Для перевода числа в дополнительный код нужно знать конечный размер числа, то есть во что мы хотим его вписать — в байт, в два байта, в четыре. Старший разряд числа означает знак. Если там 0, то число положительное, если 1, то отрицательное. Слева число дополняется знаковым разрядом. Беззнаковые (unsigned) числа мы не рассматриваем, они всегда положительные, а старший разряд в них используется как информационный.

Для перевода отрицательного числа в двоичный дополнительный код нужно перевести положительное число в двоичную систему, потом поменять нули на единицы и единицы на нули. Затем прибавить к результату 1.

Итак, переведем число -79 в двоичную систему. Число займёт у нас один байт.

Переводим 79 в двоичную систему, 79 = 1001111. Дополним слева нулями до размера байта, 8 разрядов, получаем 01001111. Меняем 1 на 0 и 0 на 1. Получаем 10110000. К результату прибавляем 1, получаем ответ 10110001 . Попутно отвечаем на вопрос ЕГЭ «сколько единиц в двоичном представлении числа -79?». Ответ — 4.

Прибавление 1 к инверсии числа позволяет устранить разницу между представлениями +0 = 00000000 и -0 = 11111111. В дополнительном коде они будут записаны одинаково 00000000.

Перевод дробных чисел

Дробные числа переводятся способом, обратным делению целых чисел на основание, который мы рассмотрели в самом начале. То есть при помощи последовательного умножения на новое основание с собиранием целых частей. Полученные при умножении целые части собираются, но не участвуют в следующих операциях. Умножаются только дробные. Если исходное число больше 1, то целая и дробная части переводятся отдельно, потом склеиваются.

Переведем число 0,6752 в двоичную систему.

0,6752
*2
1,3504
*2
0,7008
*2
1,4016
*2
0,8032
*2
1,6064
*2
1,2128

Процесс можно продолжать долго, пока не получим все нули в дробной части или будет достигнута требуемая точность. Остановимся пока на 6-м знаке.

Получается 0,6752 = 0,101011 .

Если число было 5,6752, то в двоичном виде оно будет 101,101011 .

  • Авторские методические материалы
  • Задачи по математике
  • Задачи по физике
  • Биология
  • Подготовка к ЕГЭ
  • Задачи по химии
  • Астрономия
  • Статьи об образовании
  • История науки

Как перевести десятичное отрицательное число в двоичное?

Как это реализовать ?
С положительными все понятно, а что делать с отрицательными не знаю.
Смог только получить обратный код числа ,а вот последний шаг сложение 1 привел меня в тупик.
Видел реализации на PASCAL и C , мне нужно на JAVA

  • Вопрос задан более трёх лет назад
  • 25352 просмотра

2 комментария

Оценить 2 комментария

С этим на фрилансим.ру или к Скуратову.
AVKor: Программу уже написал
Решения вопроса 0
Ответы на вопрос 4

Ivanq

Знаю php, js, html, css

Дано: -128
1. Отрицательное число делаете положительным
-128 => 128 (10000000)
2. Отрицаете все биты
128 (10000000) => 127 (01111111)
3. Прибавляете 1 к получившемуся числу
127 (01111111) => -128 (10000000)

Ответ написан более трёх лет назад
Нравится 2 17 комментариев

В 3 пункте застрял. Ну и как это сделать ? Это не десятичные числа и к ним нет оператора + , которая бы сложила двоичные числа правильно.!

Ivanq

Иван Грозный: берете 127 из предудушего пункта и прибавляете 1 десятично получится 128. Но при переводе в двоичную систему получится -128! Только во 2 пункте нужно либо делать XOR 11111111 если число должно быть одно-байтовым и XOR 1111111111111111 если число должно быть дву-байтовым

stasuss

Ivanq: ему готовый оператор надо походу. волшебный. который ему сложит массивы (или как он там представляет числа бинарные). обленились уже все)))

Ivanq

Curly Brace: да. код нормальный сам писать никто не хочет. зачем тогда тостер создали? )

Ivanq: Curly Brace: Я написал программу. По следующему алгоритму :
1. Ввод числа (отр.)
2. Переводим в положительный ( получаем модуль )
3. Минус 1 от полученного числа
4. Перевод в двоичный вид
5. Инвертирование
И мне не понадобилось ни волшебная палочка, ни сдвиги.

Ivanq

Иван Грозный: Только это не работает для положительных чисел

stasuss

это хак называется

Ivanq

Ivanq

Curly Brace: это не хак, так везде делают. команда neg в ассемблере именно так и работает
Ivanq: Мне и не нужно было для положительных чисел

Ivanq

Иван Грозный: только проверку в коде сделайте! на положительные числа и не числа вообще

Ivanq

Иван Грозный: молодцы! подрастающее поколение! сам не может додуматься для элементарной вещи!
Ivanq: Я как бы сам додумался
Ivanq: Когда писал сделал , я имел ввиду, что уже сделал, а не после того как ты сказал

Ivanq

Ivanq

stasuss

быдлокодер со стажем
а чо там? инвертируешь все биты и прибавляешь к этому числу единицу. так работает «two compliment»
Ответ написан более трёх лет назад
Нравится 1 8 комментариев
Будьте добры! Напишите код для сложения «ДВОИЧНЫХ ЧИСЕЛ В JAVA».

stasuss

Иван Грозный: я не пишу на java) да и вообще не культурно просить написать кого то код. что именно делать надо понятно же, а имплементация это уже важно в первую очередь тебе.

Curly Brace: Тогда не надо умничать, если не знаете ответа. Я знаю, что нужно в конце прибавить 00000001 в случае с 5 — кой. Ну и как это сделать ? Это не десятичные числа и к ним нет оператора + , которая бы сложила двоичные числа правильно.!

stasuss

Иван Грозный: а не надо дерзить вот. сложение в двоичной системе происходит переносом разрядов. если ты не умеешь этого делать, то тебе ваще не стоит лезть в программирование, потому что это вообще в школе изучают на информатике

stasuss

вообще, знаете ли, царь батюшка, процессор использует бинарные числа для расчетов, а все эти красивые int и прочее придуманы для удобства. и то что вы делаете сложение бинарных чисел это лишь упражнение для понимания процессов, которые выполняет процессор (каламбур какой получился) и в языки программирования не имеют таких инстурментов (ни структур данных, ни операторов). не ну ваще есть битовые операторы типа xor или or или and. но базовых операторов сложения и вычитания (а ведь еще деление есть с умножением) нету в языках прогарммирования. эти упражнения и придуманы дабы студент сам писал эти алгоритмы для операций и вникал в эту муть)

Преобразование отрицательных чисел в двоичные

Как вы преобразовываете отрицательное десятичное число в двоичное число, вероятно, сильно отличается от других числовых преобразований. вы действовали, потому что ваш ум, при всей его относительной лени, во многих отношениях гораздо более гибок, чем любой другой ПРОЦЕССОР. Однако это простой процесс.

Преобразование выполняется с помощью двоичное дополнение до двух, который требует, чтобы программист проинструктировал компьютер интерпретировать любое двоичное число, начинающееся с 1, как отрицательное. Затем программа строит соответствующее положительное число в двоичном формате, берет его дополнение и добавляет единицу.

Например, учитывая число -47, компьютер создаст двоичное число для +47:

Знаковое представление чисел

Дополнительный код позволяет представлять отрицательные числа с использованием стандартного двоичного представления и выполнения обычных операций сложения и вычитания. Знак числа определяется старшим битом в представлении числа: если старший бит равен 0, число положительное, если равен 1 — число отрицательное.

Представление положительных чисел

Положительные числа в двоичной системе записываются так же, как и в обычной двоичной системе счисления. Каждая цифра в двоичном числе называется битом. Старший бит отображает наибольший разряд в числе, а младший бит — наименьший разряд.

Представление отрицательных чисел

Для представления отрицательных чисел используется дополнительный код. Дополнительный код числа получается из его обратного кода путем инвертирования всех битов и добавления единицы к полученному результату.

В дополнительном коде отрицательные числа представляются со знаком «минус», который обозначается старшим битом, равным 1. Оставшиеся биты в дополнительном коде указывают на модуль числа.

Примеры перевода отрицательных чисел

Перевод отрицательных чисел в двоичную систему осуществляется с использованием дополнительного кода. Рассмотрим несколько примеров:

Пример 1:

1) Переводим модуль числа в двоичную систему: 7 = 0111.

2) Инвертируем полученное число: 0111 -> 1000.

3) Добавляем единицу к инвертированному числу: 1000 + 1 = 1001.

Таким образом, -7 в двоичной системе равно 1001.

Пример 2:

1) Переводим модуль числа в двоичную систему: 15 = 1111.

2) Инвертируем полученное число: 1111 -> 0000.

3) Добавляем единицу к инвертированному числу: 0000 + 1 = 0001.

Таким образом, -15 в двоичной системе равно 0001.

Таким образом, дополнительный код позволяет переводить отрицательные числа в двоичную систему и сохранять их знак.

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

Мы собрали команду экспертов, которые делятся своим опытом и знаниями с нашими читателями. Наши авторы — это профессионалы в своей области, которые имеют многолетний опыт работы и глубокие знания в своей сфере.

Мы публикуем статьи на самые разные темы, включая здоровье, красоту, фитнес, питание, бизнес, технологии и многое другое. Вы можете найти ответы на многие свои вопросы и получить полезные советы от наших экспертов.

Если у вас есть какие-либо вопросы или вы хотите узнать больше о какой-то теме, наши авторы всегда готовы помочь и ответить на ваши вопросы. Вы можете написать им через форму обратной связи, которая находится на нашем сайте.

Пример 1: -5

Для того чтобы перевести отрицательное число в двоичную систему счисления, сначала нужно записать его абсолютное значение в двоичной форме. Для числа -5 абсолютное значение равно 5, поэтому мы сначала переведем число 5 в двоичную систему счисления.

Для этого проведем деление числа 5 на 2. Получим частное 2 и остаток 1. Затем делим частное 2 на 2 и получаем частное 1 и остаток 0. Повторяем этот процесс, пока частное не станет равно 0. Каждый остаток, полученный в результате деления, записываем в обратном порядке. В итоге получаем число 101 в двоичной системе счисления.

Далее, для того чтобы получить отрицательное число, нужно инвертировать все биты числа и прибавить к нему единицу. В нашем случае число 101 станет 010 (инвертируем все биты) и прибавляем к нему 1, получаем число 011 в двоичной системе счисления.

Пример 2: -10

Для перевода отрицательного числа -10 в двоичную систему счисления, сначала нужно представить его абсолютное значение в двоичном виде.

Абсолютное значение числа 10 в двоичной системе счисления равно 1010. Затем необходимо инвертировать все биты числа, то есть заменить 1 на 0 и наоборот.

Десятичное число Двоичное представление
-1011110110

Полученное двоичное представление числа -10 можно записать в виде 11110110.

Обратный код

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

Для неотрицательных чисел обратный код двоичного числа имеет тот же вид, что и запись неотрицательного числа в прямом коде.
Для отрицательных чисел обратный код получается из неотрицательного числа в прямом коде, путем инвертирования всех битов (1 меняем на 0, а 0 меняем на 1).
Для преобразования отрицательного числа записанное в обратном коде в положительное достаточного его проинвертировать.

При 8-битном двоичном числе — знаковый бит (как и в прямом коде) старший (8-й)

Двоичное число в обратном коде

Диапазон десятичных чисел, который можно записать в обратном коде от -127 до + 127

Арифметические операции с отрицательными числами в обратном коде:

1-й пример (для положительного результата)
Дано два числа:
100 = 0110 0100
-25 = — 0001 1001
Необходимо их сложить:
100 + (-25) = 100 — 25 = 75

1-й этап
Переводим число -25 в двоичное число в обратном коде:
25 = 0 001 1001
-25= 1 110 0110
и складываем два числа:
0 110 0100 (100) + 1 110 0110 (-25) = 1 0 100 1010, отбрасываем старшую 1 (у нас получился лишний 9-й разряд — переполнение), = 0 100 1010
2-й этап
Отброшенную в результате старшую единицу прибавляем к результату:
0 100 1010 + 1 = 0 100 1011 (знаковый бит = 0 , значит число положительное), что равно 75 в десятичной системе

2-й пример (для отрицательного результата)
Дано два числа:
5 = 0000 0101
-10 = — 0000 1010
Необходимо их сложить:
5 + (-10) = 5 — 10 = -5

1-й этап
Переводим число -10 в двоичное число в обратном коде:
10 = 0 000 1010
-10= 1 111 0101
и складываем два числа:
0 000 0101 (5) + 1 111 0101 (-10) = 1 111 1010 (знаковый бит = 1 , значит число отрицательное)

2-й этап
Раз результат получился отрицательный, значит число представлено в обратном коде.
Переводим результат в прямой код (путем инвертирования значения, знаковый бит не трогаем):
1 111 1010 —-> 1 000 0101
Проверяем:
1 000 0101 = — 0000 0101 = -5

Обратный код решает проблему сложения и вычитания чисел с различными знаками, но и имеет свои недостатки:
— арифметические операции проводятся в два этапа
— как и в прямом коде два представления нуля — положительный и отрицательный

Дополнительный код

Дополнительный код — наиболее распространенный способ представления отрицательных чисел. Он позволяет заменить операцию вычитания на операцию сложения и сделать операции сложения и вычитания одинаковыми для знаковых и беззнаковых чисел.

В дополнительном коде (как и в прямом и обратном) старший разряд отводится для представления знака числа (знаковый бит).

Диапазон десятичных чисел которые можно записать в дополнительном коде от -128 до +127. Запись положительных двоичных чисел в дополнительном коде та-же, что и в прямом и обратном кодах.

Представление чисел в дополнительном коде

Дополнительный код отрицательного числа можно получить двумя способами
1-й способ:
— инвертируем значение отрицательного числа, записанного в прямом коде (знаковый бит не трогаем)
— к полученной инверсии прибавляем 1
Пример:
Дано десятичное число -10
Переводим в прямой код:
10 = 0 000 1010 —-> -10 = 1 000 1010
Инвертируем значение (получаем обратный код):
1 000 1010 —-> 1 111 0101
К полученной инверсии прибавляем 1:
1 111 0101 + 1 = 1 111 0110 — десятичное число -10 в дополнительном коде

2-й способ:
Вычитание числа из нуля
Дано десятичное число 10, необходимо получить отрицательное число (-10) в дополнительном двоичном коде
Переводим 10 в двоичное число:
10 = 0 000 1010
Вычитаем из нуля:
0 — 0000 1010 = 1 111 0110 — десятичное число -10 в дополнительном коде

Дополнительный код отрицательного числа

Арифметические операции с отрицательными числами в дополнительном коде

Дано: необходимо сложить два числа -10 и 5
-10 + 5 = -5
Решение:
5 = 0000 0101
-10 = 1111 0110 (в дополнительном коде)
Складываем:
1111 0110 + 0000 0101 = 1111 1011, что соответствует числу -5 в дополнительном коде

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

Вывод:
1. Для арифметических операций сложения и вычитания положительных двоичных чисел наиболее подходит применение прямого кода
2. Для арифметических операций сложения и вычитания отрицательных двоичных чисел наиболее подходит применение дополнительного кода

(42 голосов, оценка: 4,67 из 5)

Оцените статью
TutShema
Добавить комментарий