--- id: vjh3dj date: 2026-07-20T09:11:10+0300 languages: [ru] aliases: reviews: tags: - draft - knowledge --- # Машинные коды чисел Для представления знаковых чисел используются специальные способы кодирования, называемые машинными кодами. Основная проблема, которую они решают - как записать знак числа? Обычно старший бит используется как знаковый разряд. Однако возникают различные варианты кодирования цифровой части числа. 1. Прямой код Вариант, при котором старший разряд хранит знак, а оставшиеся - число без каких-либо изменений. 7 = 0.111 -5 = 1.101 Способ является максимально простым для записи и восприятия человеком, однако обладает недостатком - для выполнения арифметических операций необходимо дополнительно обрабатывать знаковые разряды для получения правильного ответа. Этот недостаток сильно усложняет реализацию сумматоров, однако не сильно влияет на мультипликаторы и делители. Также недостатком является наличие двух нулей: +0 и -0. 2. Обратный код Вариант, при котором все биты числа инвертируются, если оно является отрицательным. Если число положительное, оно записывается без изменений. 7 = 0.111 -5 = 1.010 Этот способ позволяет не смотреть на знаковый разряд для выполнения суммы. Однако данный код требует следить за переполнением знакового разряда в ходе сложения - переполнение является коррекцией при смене знака. Также недостатком является наличие двух нулей: +0 и -0. 3. Дополнительный код Наиболее распространённый способ хранения отрицательных чисел в современных компьютерах. Если число положительное - его код записывается без изменения. Если число отрицательное - инвертируются его биты и к ним прибавляется 1. 7 = 0.111 -5 = 1.011 В этом коде наблюдается только один ноль: +0 = -0. Сложение в этом коде происходит без каких-либо коррекций и обработок знаковых разрядов - числа складываются словно беззнаковые. 4. Модифицированный код Вариант является модификацией дополнительного кода - он имеет два разряда под знак: - если число положительное: знак 00 - если число отрицательное: знак 11 Эта модификация выполнена для определения переполнений при выполнении арифметических операций. Если переполнения не имеется - знак результата обязан быть 00 или 11. Если же переполнение произошло, знак будет 01 или 10 в зависимости от того, в какую сторону произошло переполнение. # Up - [Системы счисления](o6cxpv) # Related - [Двоичное кодирование числовых данных](zk1p84) - [Двоичная арифметика](86uwkq)