130____________________________________________
ВЗ = PEEK(adr& + 3) 'чтение байта 3 PRINT ВО, Bl, B2, ВЗ 'вывод значений байтов на экран
В отличие от программы проверки кодирования целых чисел здесь тип данных определяется не суффиксом, а первой буквой, кроме того на экран выводятся числовые значения 4 байтов, а не двух.
Запустив эту программу, увидим, что для нулевого числа все байты нулевые. Проверив кодирование знака для значений 1 и -1, убедимся, что знак числа кодируется старшим разрядом ВЗ, а в остальном код отрицательного числа ничем не отличается. В связи с этим запомним знак числа в переменной s и откорректируем содержание байта ВЗ следую1цей строкой перед оператором печати:
IF ВЗ < 128 THEN S = 1 ELSE S = -1: ВЗ = ВЗ - 128
'дешифровка знака числа
Теперь необходимо разобраться с кодированием порядка числа. Для этого будем задавать число равным целым степеням двух (2, 4, 8, 16, ...) и следить за изменением значений байтов. По этим наблюдениям можно убедиться, что порядок числа кодируется 6 разрядами байта вз (за исключением старшего разряда) и старшим разрядом B2. Поэтому введем еще одну переменную Р для значения порядка и вместо оператора вывода на дисплей запишем 3 строки:
р = 2 * ВЗ 'вычисление кода порядка IF B2 > 127 THEN P=P+1:B2=B2- 128
'коррекция кодов порядка и мантиссы PRINT ВО, Bl, B2, Р
Значению числа о. 5 должны соответствовать нулевой порядок и мантисса равная о. 5. Программа же выдает нулевые значения байтов и код порядка 126. Значит для получения значения порядка из кода порядка Р нужно вычесть 126. Нулевые значения байтов обусловлены тем, что старший разряд нормализованной мантиссы всегда равен 1, поэтому он не хранится. Мантисса не может быть нормализована только при нулевом коде порядка.
Поэтому вновь заменим последнюю строку на 3 следующие:
IF Р > О THEN B2 = B2 + 128
'коррекция нормализованной мантиссы С = «ВО / 256 + Bl) / 256 + B2) / 256
'вычисление мантиссы PRINT С, Р
Повторные проверки для различных значений исходного числа показывают, что осталось учесть код порядка и знак. При положительном порядке нужно умножить мантиссу на 2, а при отрицательном - разделить на 2, притом операцию умножения или деления нужно повторить столько раз, на сколько код порядка отличается от 126. Это можно сделать при помощи условных операторов и операторов цикла:
IF Р > 126 THEN
'вычисление модуля при положительном порядке FOR I = 1 ТО Р - 126 С = С * 2