128____________________________________________
выходят за пределы допустимых значений. В данном случае дело в том, что двумя байтами можно закодировать значения 256*256 = 65536 целых чисел. Например, для положительных чисел это будут значения от о до 65535 включительно. При необходимости кодирования как положительных, так и отрицательных значений целых чисел оказалось целесообразным использовать половину кодов для положительных значений и нуля, а вторую — для отрицательных значений (по 32768 на каждую половину). Тогда, сохраняя способ кодирования положительных чисел, можно записать двумя байтами значения от 0 до 32767 включительно, притом старший разряд старшего байта для всех кодов нулевой. Остальные коды с единицей в старшем разряде старшего байта используются для представления отрицательных значений от -1 до -32768 включительно. При этом для упрощения машинных алгоритмов сложения и вычитания наиболее эффективным оказался метод кодирования, при котором сумма кодов любой пары равных по абсолютному значению чисел с противоположными знаками равна 65536 (так называемые дополнительные коды).
Поэтому использованная нами формула верна только при значениях старшего байта меньших 128. В противном случае необходимо вычитать из полученного по этой формуле значения число 65536. Итак, появилась необходимость вычисления по разным формулам в зависимости от знака числа, поэтому снова заменим последнюю строку на этот раз уже на шесть строк:
IF B1% < 128 THEN 'проверка знака числа
С% = В0% + 256 * B1% 'вычисление положительного
'значения ELSE
С% = В0% + 256 * (B1% - 256) 'вычисление отрицательного
'значения ENDIF PRINT C% 'вывод значения числа
Как видите, пришлось ввести еще одну переменную и использовать условный оператор.
Заметим, что за счет использования алгебраических преобразований удалось избежать вычитания большого числа 65536, которое не может быть представлено как INTEGER. Теперь можно запускать программу для любых значений числа А%. Правильность понимания кодирования чисел типа INTEGER будет продемонстрирована совпадением значений, напечатанных в первой и второй строках.
Целые числа типа LONG кодируются аналогичным образом, в чем вы можете убедиться, составив и отладив аналогичную программу самостоятельно. Ее отличия будут состоять в типе исходного числа и результата, а также в необходимости работы с четырьмя байтами. Для получения компактного выражения при вычислении значения числа типа LONG рекомендуется применить так называемую схему Горнера:
С& = В0% + 256 * (B1% + 256 * (В2% + 256 * (В3% - 256))) , использующую наименьшее количество умножений.