Онлайн калькулятор Прямий, додатковий та зворотний коди

Прямий, додатковий і зворотний код числа (за запитом).

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

Прямий, додатковий та зворотний код

Прямий код числа це уявлення беззнакового двійкового числа. Якщо йдеться про машинну арифметику, то як правило на подання числа приділяється певна обмежена кількість розрядів. Діапазон чисел, який можна уявити числом розрядів n дорівнює

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

Додатковий код числа, абодоповнення до двійки (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 двох біт переносів.

Ось завдяки таким зручним властивостям додатковий код – це найпоширеніший спосіб подання негативних чисел у машинній арифметиці.