Подтвердить что ты не робот

Является ли одно дополнение реальной проблемой или просто исторической?

Другой вопрос спросил об определении нечетной/четности в C, а идиоматический (x и 1) подход был правильно помечен как сломанный для одна система на основе дополнения, которую допускает стандарт C.

Действительно ли системы существуют в "реальном мире" за пределами компьютерных музеев? Я кодировал с 1970 года, и я уверен, что никогда не встречал такого зверя.

Кто-нибудь действительно разрабатывает или тестирует код для такой системы? И если нет, мы должны беспокоиться о таких вещах или помещать их в Room 101 вместе с бумажной лентой и перфокартами...?

4b9b3361

Ответ 1

Все это сводится к пониманию ваших корней.
Да, это технически старая техника, и я, вероятно, буду делать то, что другие люди предложили в этом вопросе, и использовать оператор modulo (%) для определения нечетного или четного. Но понимание того, что дополнение 1s (или дополнение 2s) всегда полезно знать. Независимо от того, используете ли вы их когда-либо, ваш процессор все время имеет дело с этими вещами. Так что никогда не будет больно понимать концепцию. Теперь, современные системы делают это так, что вам вообще никогда не приходится беспокоиться о таких вещах, поэтому он стал темой для программирования 101 курса. Но вы должны помнить, что некоторые люди по-прежнему будут использовать это в "реальном мире"... например, вопреки распространенному мнению, есть люди, которые все еще используют сборку! Не так много, но пока процессоры не смогут понять исходные С# и Java, кто-то еще должен будет понять этот материал.

И, черт возьми, вы никогда не знаете, когда вы можете найти свое "я", делающее что-то там, где вам действительно нужно выполнить двоичную математику, и что дополнение 1s может пригодиться.

Ответ 2

Я работаю в области телеметрии, и некоторые из наших клиентов имеют старые аналого-цифровые преобразователи, которые по-прежнему используют 1 дополнение. Мне просто пришлось написать код на днях, чтобы преобразовать из 1 дополнения в 2 дополнения, чтобы компенсировать.

Итак, да, он все еще там (но вы не будете сталкиваться с ним очень часто).

Ответ 3

RFC 791 стр .14 определяет контрольную сумму IP-заголовка как:

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

Таким образом, одно дополнение по-прежнему сильно, используемое в реальном мире, в каждом отправленном IP-пакете.:)

Ответ 4

CDC Cyber ​​18, который я использовал в 80-х, был машиной с дополнением 1s, но это почти 30 лет назад, и я не видел ее с тех пор (однако это был последний раз, когда я работал над не- PC)

Ответ 5

Я никогда не сталкивался с одной системой дополнений, и я кодировал ее до тех пор, пока у вас есть.

Но я столкнулся с 9 -ой системой дополнений - машинным языком калькулятора HP-41c. Я признаю, что это можно считать устаревшим, и я не думаю, что у них когда-либо был компилятор C для них.

Ответ 6

В прошлом году мы вышли из нашего прошлого 1960 года Honeyboxen, что сделало его нашей самой старой машиной на месте. Это было два дополнения. Это не значит, что знание или осознание одного дополнения - это плохо. Просто, вы, вероятно, никогда не столкнетесь с одним из вопросов, связанных с комплементами сегодня, независимо от того, сколько у них компьютерной археологии вы делаете на работе.

Проблемы, с которыми вы чаще сталкиваетесь с целочисленной стороной, endian (я смотрю на вас PDP). Кроме того, вы столкнетесь с более "реальным миром" (т.е. сегодня) с плавающим point форматы, чем вы будете целочисленными форматами.

Ответ 7

Смешно, люди задавали тот же вопрос в comp.std.c в 1993 году, и никто не мог указать на одну машину дополнения, которая была использована тогда.

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

Ответ 8

Я решил найти его. У систем Unisys ClearPath есть компилятор ANSI C (да, они называют его "Американским национальным стандартом C", для которого даже последняя документация в формате PDF была в последний раз обновлена ​​в 2013 году. Документация доступна онлайн;

Здесь все подписанные типы используют одно представление дополнения со следующими свойствами:

Type                 | Bits | Range
---------------------+------+-----------------
signed char          |   9  |  -2⁸+1 ...  2⁸-1
signed short         |  18  | -2¹⁷+1 ... 2¹⁷-1
signed int           |  36  | -2³⁵+1 ... 2³⁵-1
signed long int      |  36  | -2³⁵+1 ... 2³⁵-1
signed long long int |  72  | -2⁷¹+1 ... 2⁷¹-1

Примечательно, что он также по умолчанию поддерживает несоответствующие unsigned int и unsigned long, которые варьируются от 0 ... 2³⁶ - 2, но могут быть изменены на 0 ... 2³⁶ - 1 с помощью прагмы.

Ответ 9

Является ли одно дополнение реальной проблемой или просто историческим?

Да, он все еще используется. Его даже используется в современных процессорах Intel. Из Руководство разработчика программного обеспечения для разработчиков Intel® 64 и IA-32 2A, стр. 3-8:

3.1.1.8 Раздел описания

Затем каждая инструкция описывается числом секций информации. Раздел "Описание" описывает назначение инструкций и требуемых операндов более подробно.

Сводка терминов, которые могут использоваться в разделе описания:
* Устаревший SSE: относится к SSE, SSE2, SSE3, SSSE3, SSE4, AESNI, PCLMULQDQ и любым будущим наборам инструкций, ссылающихся на регистры XMM и закодированным без префикса VEX.
* VEX.vvvv. Битовое поле VEX, определяющее регистр источника или получателя (в форме дополнения 1s).
* rm_field: сокращение для поля ModR/M r/m и любого REX.B
* reg_field: стенограмма для поля регистрации ModR/M и любого REX.R