..

Сайт города Попасная.
 

 

Программирование

 

Интернет издания:

ПОПАСНЯНСКАЯ ПРАВДА

 


по антивирус

 

 

 

5.2. Представление целых чисел в ПК

В компьютере числа представлены в двоичной системе счисления. Минимальный адресуемый элемент данных состоит из восьми двоичных разрядов и называется байтом. В байт можно записать одно из 256 целых неотрицательных чисел от 0 до 255 согласно таблице 5.3.

Таблица 5.3. Двоичный и десятичный эквиваленты байта

Содержимое бита
Десятичный эквивалент
00000000
0
00000001
1
00000010
2
00000011
3
...
...
11111110
254
11111111
255

Содержимое байта можно рассматривать как число без знака или как число со знаком. Один байт отводится как переменной типа Byte, так и переменной Shortlnt. Переменная типа Byte принимает значения в диапазоне от 0 до 255, а переменная типа Shortlnt - в диапазоне от -128 до 127. В обоих случаях в байте хранятся одни и те же двоичные числа, однако они по-разному интерпретируются. При использовании описателя типа Shortlnt единица в старшем разряде байта рассматривается как признак отрицательного числа. Поэтому максимальное число со знаком, размещаемое в байте, будет равно 011111111=127. Отрицательные числа представляются в дополнительном коде, который формируется по алгоритму, рассматриваемому на примере определения двоичного представления числа -5:
1. Сначала записывается двоичное представление абсолютного значения числа. 5=00000101.
2. Затем выполняется инверсия битов полученного двоичного представления, то есть 0 меняется на 1, а 1 на 0. Преобразованное двоичное представление числа 5 будет равно 11111010.
3. В заключение к младшему разряду полученного двоичного представления прибавляется единица. Таким образом, представление числа -5 в дополнительном коде равно 11111011.
Для того чтобы по представлению числа в дополнительном коде найти его абсолютное значение, шаги алгоритма выполняются в аналогичной последовательности. Определим абсолютное значение числа, дополнительный код которого равен 10001101.
1. Получаем инверсный код: 01110010
2. К результату прибавляем 1: 01110011
Учитывая вышесказанное, понятно, что в зависимости от типа переменной ее содержимое может рассматриваться по-разному. Так, если двоичное представление содержимого байта 10000001, то значение соответствующей этому байту переменой типа Byte равно 129, а типа Shortlnt равно -127.
При выполнении арифметических операций над целыми числами, например, сложения, возможно возникновение переполнения, то есть такой ситуации, когда полученный результат не умещается в отведенное переменной количество бит. В этом случае результаты вычислений искажаются, а иногда, при использовании переменных, принимающих как положительные, так и отрицательные значения, возможно возникновение парадоксальных ситуаций, при которых увеличение значений переменной приводит к уменьшению результата. Рассмотрим, например, следующую программу, вычисляющую квадраты последовательности чисел и выводящую их на экран.

Программа 5.1.

Var a,i:Shortlnt;
Begin
For i:=10 To 17 Do
Begin
a:=Sqr(i);
Writeln('Number=',i,' Square=',a);
End;
Readln;
End.

Результаты ее выполнения показаны ниже:

Number=10 Square=100
Number=11 Square=121
Number=12 Square=-112
Number=13 Square=-87
Number=14 Square=-60
Number=15 Square=-31
Number=16 Square=0
Number=17 Square=33

Обратите внимание, что в соответствии с полученными результатами 12*12 =-112, а не 144, как должно быть. Дело в том, что в двоичном представлении 144=100011111, что соответствует как раз числу -112, представленному в дополнительном коде. Число 16=100000000, единица в старшем разряде результата выходит за границы разрядной сетки в восемь битов, поэтому в переменной а, предназначенной для размещения результата, остается 00000000, что соответствует 0. Подобных ошибок можно избежать, если установить (включить) опции Overflow checking (Проверка переполнения) и Range checking (Проверка выхода за границы допустимого диапазона) в панели Runtime errors (Ошибки времени выполнения) пункта Compiler меню Options. В этом случае возникновение подобной ситуации приведет к аварийному завершению программы.

 

Вернуться к оглавлению

 
Popasnaya.com.ua Web-Source 2003 - 2004 / babelyuk jr / All Rights Reserved