Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
39
Добавлен:
15.04.2015
Размер:
439.06 Кб
Скачать

7.2.2. Целые типы

Внутреннее представление

Целые числа представляются в компьютере в двоичной системе счисления (отрицательные числа — в дополнительном коде). В Паскале определены несколько целых типов данных, отличающиеся длиной и наличием знака: старший двоичный разряд либо воспринимается как знако­вый, либо является обычным разрядом числа. Внутреннее представле­ние определяет диапазоны допустимых значений величин (от нулей во всех двоичных разрядах до единиц).

Целые типы данных:

Тип

Название

Размер

Знак

Диапазон значений

integer

Целое

2 байта

Есть

-32 768 .. 32 767 (-215 .. 215-1)

shortint

Короткое целое

1 байт

Есть

-128 .. 127 (-27 .. 27-1)

byte

Байт

1 байт

Нет

0 .. 255 (0 .. 28-1)

word

Слово

2 байта

Нет

0 .. 65 535 (0 .. 216-1)

longint

Длинное целое

4 байта

Есть

-2 147 483 648 .. 2 147 483647(-231 231-1)

Первоначально в Паскале был всего один целый тип — integer, остальные добав­лены впоследствии для представления больших величин или для экономии па­мяти. Например, нет смысла отводить 4 байта под величину, про которую из­вестно, что все ее значения находятся в диапазоне от 0 до 100.

Операции

С целыми величинами можно выполнять арифметические операции. Результат их выполнения всегда целый (при делении дробная часть отбрасы­вается).

Арифметические операции для целых величин

Операция

Знак операции

Сложение

+

Вычитание

-

Умножение

*

Деление

div

Остаток от деления

mod

К целым величинам можно также применять операции отношения, которые рассматривались выше. Результат этих операций имеет ло­гический тип, например результатом сравнения 3 < 8 будет значение true.

К данным целого типа применимы также поразрядные операции. Они выполняются над каждой парой одноименных разрядов операндов. Правила выполнения операций отрицания над одним из разрядов (например, с номером i):

Var x = 2

x:byte;

begin 00000010

x:=2;  not x = 253

11111101 not x = 253

Поразрядное “НЕ” (одноместная операция)

Xi

not Xi

0

1

1

0

Поразрядное “И” или поразрядное умножение (двухместная операция)

Xi

Yi

Xi and Yi

0

0

0

0

1

0

1

0

0

1

1

1

Поразрядное “ИЛИ” или поразрядное сложение (двухместная операция)

Xi

Yi

Xi or Yi

0

0

0

0

1

1

1

0

1

1

1

1

Поразрядное “ИСКЛЮЧАЮЩЕЕ ИЛИ”. Эта операция устанавливает результат, равным единице, при несовпадении соответствующих разрядов.

Xi

Yi

Xi xor Yi

0

0

0

0

1

1

1

0

1

1

1

0

Поразрядный сдвиг вправо и влево достигается применением функций:

X Shl Y - значение X сдвигается влево на Y разрядов

X shr Y - значение X сдвигается вправо на Y разрядов.

При выполнении сдвигов мысленная граница разрядной сетки для типа числа (правая или левая) сдвигается на соответствующее число разрядов (вправо или влево):

При сдвиге вправо мысленная правая граница перемещается влево;

При сдвиге влево мысленная левая граница перемещается вправо.

Выдвигаемые в направлении сдвига разряды числа, которые пересекают мысленную границу числа, отбрасываются. С противоположной стороны при сдвигах нужное количество разрядов добавляется (оно обычно заполняется нулями).

Нулями всегда заполняются разряды, добавляемые при сдвиге влево или вправо целых положительных чисел. При этом сдвиг влево на Nразрядовэквивалентен умножениюна 2N, а сдвиг вправо наNразрядовравносилен целочисленному делению(без остатка) на 2N.

При сдвиге вправо отрицательных чисел типов shortint,integerиlongint(они могут иметь отрицательные значения) в освободившиеся слева разряды записываются копии знакового разряда. При этом сам знаковый разряд циклически восстанавливается на своем старом месте. По сути дела SHR есть арифметический сдвиг.

При сдвиге этих же чисел влево знаковый разряд замещается тем значением, которое придет справа. Но так происходит лишь если выключена опция компилятора Range Checking. Если же она включена, то при попытке изменить знаковый разряд получим сообщение о выходе за границы диапазона.

Например, результатом операции 12 shr2 будет значе­ние 3, поскольку двоичное представление числа 12 — 1100. Выполнив операцию 12shl1, то есть сдвинув это число влево на 1 разряд, получим 24.

Эти поразрядные логические операции используются для выполнения следующих действий:

  1. выделение нужного фрагмента двоичного кода;

  2. очистка (установка в ноль) нужного фрагмента двоичного кода;

  3. проверка (равен 0 или 1) разрядов нужного фрагмента двоичного кода;

  4. инвертирование нужного фрагмента двоичного кода (весь код можно проинвертировать с помощью операции not);

  5. занесение единицы в нужные разряды двоичного кода.

Во всех далее рассматриваемых случаях все действия выполняются с использованием поразрядных операций и так называемой маски (вспомогательный двоичный код – константа, который для каждого конкретного случая устанавливается по своему).

Стандартные функции и процедуры

К целым величинам можно применять стандартные функции и процедуры

Имя

Описание

Результат

Пояснения

Функции

abs

Модуль

Целый

|х| записывается abs(x)

arctan

Арктангенс угла*

Вещественный

arctg x записывается arctan(x)

cos

Косинус угла

Вещественный

cos x записывается cos(x)

ехр

Экспонента

Вещественный

ех записывается ехр(х)

ln

Натуральный логарифм

Вещественный

logex записывается ln(х)

odd

Проверка на четность

Логический

odd(3) даст в результате true

pred

Предыдущее значение

Целый

pred(3) даст в результате 2

sin

Синус угла

Вещественный

sin x записывается sin(x)

sqr

Квадрат

Целый

х2 записывается sqr(x)

sqrt

Квадратный корень

Вещественный

x записывается sqrt(x)

succ

Следующее значение

Целый

succ(3) даст в результате 4

Процедуры

inc

Инкремент

inc(x) — увеличить х на 1 inc(x, 3) — увеличить х на 3

dec

Декремент

dec(x) — уменьшить х на 1 dec(x, 3) — уменьшить х на 3

* – Угол задается в радианах.

Замечание: по поводу функций и процедур: процедура и функция отличаются формой вызова.

Пример:

Var

x,

y: integer;

begin

x := 10;

c := -10;

Dec(x); { Вызов процедуры Dec}

y := abs(c); { Вызов функции abs}

end.

Соседние файлы в папке WORD