2017-02-21 2 views
2

Я пришел из C++ и java, и теперь я читаю книгу о PL/1 и имею некоторые проблемы с пониманием типов данных. Первый фиксированный ящик. Как я понимаю, на самом деле существует 4 фиксированных типа бинов. К ним относятся:PL/1 фиксированные и плавающие, децибельные и bin-типы данных. Разница между dec и bin. Сколько байтов?

фиксированной бен (7, п) - 1 байт

фиксированной бен (15, п) - 2 байта

фиксированной бен (31, п) - 4 байта

фиксированной бен (63, п) - 8 байт

Если я пишу в моей программе, например, фиксированный бункер (10, п) она будет «переделанный» в основной бункер (15, п) причина PC/mainfraim может содержать числа только в целых байтах. Как я знаю, существуют также фиксированные типы данных dec (m, n). Но каковы эти «магические числа» для фиксированного dec 1,2,4,8 байт? Является ли внутреннее представление в памяти фиксированного бина и фиксированным dec равным или другим?

А про поплавок. Что такое волшебный поплавок и поплавок dec m numbers? Сколько их байтов? И внутреннее представление float bin и float dec equal/different?

Я нашел только float dec (33) (думаю, что 16 байт). И float bin (21) - 4 байта, (53) - 8 байтов.

ответ

3

Как вы уже отметили, «магические числа» для FIXED BINARY всегда на единицу меньше числа бит в (мощности двух) байтов. «один меньше» находится из-за знака. Поэтому легко понять, что для FIXED BINARY UNSIGNED границы сдвинуты на один и составляют 8,16,32,64 соответственно.

Внутреннее представление для FIXED DECIMAL может показаться немного необычным, если вы не используете фон мэйнфреймов, так как он использует упакованный BCD (двоичный код десятичной), где каждая десятичная цифра занимает 4 бита, а знак указывается другим 4 бит (шестнадцатеричный D отрицательный, шестнадцатеричный C или F положительный). Таким образом, внутреннее представление +1287 будет (в шестнадцатеричном формате) 01 28 7C. Кроме того, внутренняя длина не должна быть мощью двух, поэтому вы можете сказать, что «магические числа» для FIXED DECIMAL - это все нечетные числа, так как они заполняют целое число байтов, в то время как четные числа оставляют левый самый полубайт неиспользованным.

Для данных BINARY FLOAT процессор (предположим, что вы запускаете на аппаратном обеспечении System z) знает три внутренних типа: короткую, длинную и расширенную точность, занимая соответственно 4, 8 или 16 байт. Короткая используется для уточнений до 21, для исправлений до 53, для чего-то большего.

С DECIMAL FLOAT все становится немного сложнее, поскольку зависит от того, сможет ли компилятор использовать внутреннее десятичное число с плавающей запятой (DFP). Если верхняя граница для короткой и длинной точности равна 7 и 16, если она не может ее использовать, она будет использовать двоичное внутреннее представление, а границы точности - 6 и 16 (так как теперь точность означает десятичные цифры).

Источник: все эти границы взяты из справочника по языку Enterprise PL/I для z/OS V4.5.

+0

Большое спасибо! Но что означают точность 21 и 53 для двоичного поплавка? Означает ли это, сколько двоичных цифр представляет мантису? И какое значение для 16-байтового двоичного поплавка я должен предоставить? –

+0

Это должно быть значение, но пределы немного странны, поскольку принципы работы описывают «фракции» как имеющие 23 бит 52 бит.С 'BIN FLOAT (54)' вы должны уже получить 16-байтную переменную. –

Смежные вопросы