Поле не заполнено.
'%1' не похож на адрес электронной почты.
Пожалуйста, заполните это поле.
Значение поля должно содержать как минимум %1 символов.
Значение не должно быть длиннее %1 символов.
Значение поля не совпадает с полем '%1'
Введен неверный символ. Допустимые символы:'%1'.
Ожидается число.
Ожидается положительное число.
Ожидается целое число.
Ожидается положительное целое число.
Значение должно быть в диапазоне [%1 .. %2]
Символ '%1' уже присутствует в наборе допустимых символов.
Значение поля должно быть меньше %1.
Первым символом должна быть буква латинского алфавита.
Вс
Пн
Вт
Ср
Чт
Пт
Сб
Январь
Февраль
Март
Апрель
Май
Июнь
Июль
Август
Сентябрь
Октябрь
Ноябрь
Декабрь
век
до Н.Э.
%1 век
Возникла ошибка при импорте данных в строке:%1. Значение: '%2'. Ошибка: %3
Невозможно определить разделитель полей. Для разделения полей можно использовать следующие символы: Tab, точку с запятой (;) или запятую (,).
%3.%2.%1%4
%3.%2.%1%4 %6:%7
с.ш.
ю.ш.
в.д.
з.д.
да
нет
Неправильный формат файла. Поддерживаются только следующие форматы: %1
Пожалуйста оставьте свой телефон и/или адрес электронной почты.
минут
минут
минута
минуты
минуты
минуты
минут
минут
минут
минут
минут
минут
минут
час
часа
часа
часа
часов
часов
часов
часов
часов
часов
часов
дней
день
дня
дня
дня
дней
дней
дней
дней
дней
дней
дней
месяц
месяца
месяца
месяца
месяцев
месяцев
месяцев
месяцев
месяцев
месяцев
месяцев
год
года
года
года
лет
лет
лет
лет
лет
лет
лет
назад
%1 минут назад
%1 минут назад
%1 минуту назад
%1 минуты назад
%1 минуты назад
%1 минуты назад
%1 минут назад
%1 минут назад
%1 минут назад
%1 минут назад
%1 минут назад
%1 минут назад
%1 минут назад
%1 час назад
%1 часа назад
%1 часа назад
%1 часа назад
%1 часов назад
%1 часов назад
%1 часов назад
%1 часов назад
%1 часов назад
%1 часов назад
%1 часов назад
%1 дней назад
%1 день назад
%1 дня назад
%1 дня назад
%1 дня назад
%1 дней назад
%1 дней назад
%1 дней назад
%1 дней назад
%1 дней назад
%1 дней назад
%1 дней назад
%1 месяц назад
%1 месяца назад
%1 месяца назад
%1 месяца назад
%1 месяцев назад
%1 месяцев назад
%1 месяцев назад
%1 месяцев назад
%1 месяцев назад
%1 месяцев назад
%1 месяцев назад
%1 год назад
%1 года назад
%1 года назад
%1 года назад
%1 лет назад
%1 лет назад
%1 лет назад
%1 лет назад
%1 лет назад
%1 лет назад
%1 лет назад
Получить код ссылки
Внешний вид
Пример
РаботаИнженерныеКонвертеры

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

Прямой, дополнительный и обратный код числа (создан по запросу)
Timur2010-03-23 19:43:59
Пользователь Евгений попросил нас сделать перевод из прямого в дополнительный или обратный коды

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

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

Прямой, дополнительный и обратный кодCreative Commons Attribution/Share-Alike License 3.0 (Unported)
 Диапазон:
 Представление положительного числа:
 Обратный код:
 Дополнительный код:


Итак, теория

Прямой код числа это представление беззнакового двоичного числа. Если речь идет о машинной арифметике, то как правило на представление числа отводится определенное ограниченное число разрядов. Диапазон чисел, который можно представить числом разрядов n равен 2^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, или 2^4.
Или, что тоже самое, дополнительный код числа "дополняет" прямой код до 2^n, т.е. 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, то было. При этом, если переполнения не было, то выход за разряды можно игнорировать.

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

7+1=8

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

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

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

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

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

P.S. Ну а обратный код дополняет число до 2^n-1, или до всех 1, потому и называется дополнением до 1. Им тоже можно представлять отрицательные числа, и реализовать вычитание и сложение схемой сложения, только сложение там хитрее - с циклическим переносом, ну и представить можно меньше на одно число, так как все единицы уже заняты - это обратный код нуля, эдакий "минус нуль", то есть диапазон получается, если брать наш пример от -7 до 7. Не так удобно, одним словом.

Комментарии

 Все обсуждения
Защита от спама