Подписанный удар
В вычислительной технике знаковое дублирование — это схема кодирования, которая сохраняет знак числа путем изменения (обычно) последней цифры. Он используется в символьных данных на мэйнфреймах IBM такими языками, как COBOL , PL/I и RPG . [1] Его цель — сохранить символ, который в противном случае использовался бы цифрой знака. [2] Код получен из кода перфокарты Холлерита , где в одном столбце карты можно вводить как цифру, так и знак. Это называется дополнительным ударом, потому что над цифрой в этом столбце есть 12 или 11 штрихов, обозначающих знак. Три верхних ряда карты называются ударами по зонам . [3] поэтому числовые символьные данные, которые могут содержать символы, называются зональными десятичными числами .
В терминологии IBM младшие четыре бита байта в памяти называются цифрой , а старшие четыре бита — зоной . [4] Биты цифр . содержат числовое значение от 0 до 9 Биты зоны . содержат либо 'F'x, образующие символы 0–9, либо позиция символа, содержащая дублирующий элемент, содержит шестнадцатеричное значение, указывающее положительное или отрицательное значение, образующее другой набор символов (Зоны A, C, E и F обозначают положительные значения, B и D – отрицательные).
The PACK
инструкция на машинах с архитектурой IBM System/360 преобразует знак зонированного десятичного числа при преобразовании в упакованное десятичное число ,и соответствующий UNPK
Инструкция установит правильный переперфузированный знак своего зонированного десятичного вывода. [5]
Языковая поддержка
[ редактировать ]ПЛ/Я
[ редактировать ]PL/I использует PICTURE
атрибут для объявления зонированных десятичных данных со знаком. Каждый символ числового изображения, кроме V
, который указывает положение предполагаемой десятичной точки, представляет цифру. Образный персонаж T
, I
, или R
указывает на позицию цифры, которая может содержать дублирование. T
указывает, что позиция будет содержать {–I, если она положительная, и {–R, если отрицательная. I
указывает, что позиция будет содержать {–I, если положительное значение, и 0–9, если отрицательное. R
указывает, что позиция будет содержать 0–9, если она положительная, и {–R, если отрицательная.
Например PICTURE 'Z99R'
описывает четырехзначное числовое поле. Первая позиция может быть пустой или содержать цифры 0–9. Следующие две позиции будут содержать цифры, а четвертая позиция будет содержать 0–9 для положительного числа и {–R для отрицательного числа. [6]
Присвоение значения 1021 приведенному выше изображению сохранит символы «1021» в памяти; присвоение -1021 сохранит "102J".
КОБОЛ
[ редактировать ]COBOL использует символ изображения «S» для USAGE IS DISPLAY
данные без SIGN IS SEPARATE CHARACTER
чтобы указать на чрезмерный удар. SIGN IS LEADING
указывает, что удар находится над первым символом поля. SIGN IS TRAILING
, размещает его над последним символом. SIGN IS TRAILING
является значением по умолчанию. [7]
С/С++
[ редактировать ]Язык C не поддерживает зонированную десятичную дробь. Компилятор IBM ILE C/C++ для System i предоставляет функции для преобразования между int
или double
и зонированная десятичная дробь: [8]
- QXXDTOZ() — Преобразовать двойное число в зонное десятичное число
- QXXITOZ() — Преобразовать целое число в зонное десятичное число
- QXXZTOD() — Преобразование зонной десятичной дроби в двойную
- QXXZTOI() — Преобразовать десятичное число с зонами в целое число
Коды дублирования EBCDIC
[ редактировать ]EBCDIC характер | цифра | Знак | Код карты [9] |
---|---|---|---|
{ | 0 | + | 12-0 |
А | 1 | + | 12-1 |
Б | 2 | + | 12-2 |
С | 3 | + | 12-3 |
Д | 4 | + | 12-4 |
И | 5 | + | 12-5 |
Ф | 6 | + | 12-6 |
Г | 7 | + | 12-7 |
ЧАС | 8 | + | 12-8 |
я | 9 | + | 12-9 |
} | 0 | - | 11-0 |
Дж | 1 | - | 11-1 |
К | 2 | - | 11-2 |
л | 3 | - | 11-3 |
М | 4 | - | 11-4 |
Н | 5 | - | 11-5 |
ТО | 6 | - | 11-6 |
П | 7 | - | 11-7 |
вопрос | 8 | - | 11-8 |
Р | 9 | - | 11-9 |
Примеры
[ редактировать ]10} равно -100
45А это 451
ASCII-представление
[ редактировать ]Представление знаковых символов дублирования «не стандартизировано в ASCII, и разные компиляторы используют разные коды дублирования». В некоторых случаях «представление отличается от результата преобразования поля со знаком EBCDIC в ASCII с помощью таблицы перевода». [10] В других случаях они одинаковы, чтобы обеспечить совместимость исходных данных при потере связи между кодом символа и соответствующей цифрой.
Отрицательное поле EBCDIC, оканчивающееся цифрой «1», будет кодировать эту цифру как «D1»x, заглавную букву «J», где цифра равна «1», а зона — «D», что указывает на отрицательное поле. Прописная буква «J» ASCII — это «4A»x, где шестнадцатеричное значение не имеет никакой связи с числовым значением. В альтернативной кодировке для этого представления используются строчные буквы «q», «71»x, где цифра — «1», а зона — «7». Это сохраняет цифру и последовательность сопоставления за счет необходимости индивидуального распознавания и перевода полей с дублированием.
Примеры
[ редактировать ]Gnu COBOL и MicroFocus COBOL используют строчные буквы от «p» до «y» для обозначения отрицательных значений от «0» до «9». [11] [12]
Компиляторы PL/I в системах ASCII используют тот же набор символов ({, J–R), что и EBCDIC, для обозначения дублей. [13]
Ссылки
[ редактировать ]- ^ Корпорация IBM (июнь 1994 г.). Справочник по RPG/400 (PDF) . п. 403 . Проверено 7 августа 2018 г.
- ^ «Tech Talk, учебные пособия по COBOL, преобразование знаковых полей EBCDIC в ASCII» . Проверено 15 марта 2008 г.
- ^ Ван Оверберг-младший, Альберт Г. (1987). Техник обработки данных третьего класса . Программа военно-морского образования и подготовки. стр. 3–8 . Проверено 12 января 2022 г.
- ^ Корпорация IBM. Принципы работы IBM System/360 (PDF) . п. 34 . Проверено 12 января 2022 г.
- ^ Корпорация IBM (октябрь 2001 г.). z/Принципы работы архитектуры (2-е изд.). стр. 7–112, 7–158 . Проверено 7 августа 2018 г.
- ^ Корпорация IBM (июнь 1995 г.). Справочник по языку IBM PL/I для MVS и VM (PDF) . стр. 294–296 . Проверено 2 августа 2018 г.
- ^ Корпорация IBM. «Enterprise COBOL для z/OS, V4.2, справочник по языку» . Центр знаний IBM . Проверено 1 мая 2020 г.
- ^ Корпорация IBM. «Библиотечные функции» . Центр знаний IBM . Проверено 1 мая 2020 г.
- ^ Корпорация IBM (1989). Краткое описание расширенной архитектуры System/370 . п. 41.
- ^ «Преобразование знаковых полей EBCDIC в ASCII» . Специалисты по конвертации носителей DISC . Проверено 29 ноября 2018 г.
- ^ «Руководство программиста GnuCOBOL» . СоурсФордж . Проверено 12 января 2022 г.
- ^ «Micro Focus Visual COBOL 5.0 для Visual Studio 2019» . Микро Фокус . Проверено 12 января 2022 г.
- ^ Корпорация Кеднос. «Справочное руководство Kednos PL/I для систем OpenVMS» . Кеднос.com . Проверено 12 января 2022 г.