Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция4 ЯП КБ.doc
Скачиваний:
5
Добавлен:
22.08.2019
Размер:
457.73 Кб
Скачать
      1. Логический тип

Логический (булевский) тип данных присутствует в большинстве ЯП.

Спецификация. Состоит из объектов, которые могут принимать два значения: истина (true) и ложь (false), причем false<true.

Операции:

ПрисвОп: Boolean1Boolean2void

или

Boolean1Boolean2Boolean3

и логические операции (умножение, сложение и отрицание):

ЛогУмн (and): Boolean1Boolean2Boolean3

ЛогСлож (or): Boolean1Boolean2Boolean3

ЛогОтр (not): Boolean1Boolean2.

Менее распространены такие логические операции, как эквивалентность, исключающее ИЛИ, импликация, И-НЕ,

ИЛИ-НЕ.

Реализация. Объекты логического типа представляются минимальной адресуемой областью памяти (байтом или словом).

Значения истина или ложь могут быть реализованы одним из двух способов:

  • Какой-то определенный бит внутри области памяти (например, знаковый бит) используется для представления логического значения (ложь=0, истина=1), а остальные биты игнорируются;

  • Значению ложь соответствуют нули во всех битах отводимой области памяти, а любые другие комбинации единиц и нулей в этой области памяти интерпретируются как значение истина.

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

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

      1. Символьный тип

Значением объекта данных символьного типа является одиночный символ.

Спецификация. Множество значений задается перечислением символов, соответствующим стандартному набору (например, ASCII или Unicode).

Операции:

ПрисвОп: char1char2void

или

char1char2char3

и сравнения:

СравнОп: char1char2Boolean.

Для прямого и обратного отображений множества символьных значений на подмножество натуральных чисел, являющихся порядковыми номерами этих значений, в некоторые ЯП (например, в Паскаль) встроены функции преобразования, являющиеся обратными по отношению друг к другу:

Ord: charinteger,

Chr: integerchar,

А также функции определения предыдущего (successor) и следующего (predecessor) символов:

Pred: charchar,

Succ: charchar.

Реализация. Символьный тип данных обычно поддерживается аппаратно, т. к. объекты этого типа используются для ввода-вывода.

      1. Указатели

Указатели обеспечивают возможность конструирования произвольных структур данных из объектов разного типа.

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

Два способа определения указателей:

  1. Указатели могут ссылаться только на объекты данных одного типа. Такой подход используется в ЯП, в которых применяется статических контроль и объявления типов (С, Pascal, Ada).

  2. Указатели могут ссылаться на объекты данных любого типа в различные моменты выполнения программы. Такой способ используется в ЯП с динамическим контролем типов (Smalltalk). Значение типа объекта, на который производится ссылка в текущий момент времени, хранится в дескрипторе.

В C, C++, Pascal указатели являются объектами данных, которые можно явно использовать в программе. При этом указатели могут быть как простыми переменными, так и компонентами сложных структур данных. В языке Java указатели являются частью скрытых структур данных, управляемых реализацией языка.

Операции:

  • Операция создания объекта данных фиксированного размера. В результате выполнения этой операции в памяти отводится место для нового объекта, создается указатель на этот объект данных, которому присваивается значение ссылки (адреса) на этот объект;

  • Операция разыменования использует значение указателя для доступа к объекту данных, на который он ссылается.

Для указателей-переменных, явно употребляемых в программе, используются операции:

  • Операция присваивания. Значение одного указателя присваивается другому указателю.

Спецификация имеет вид:

ПрисвОп: ptr1ptr2void

или

ptr1ptr2ptr3;

  • Операции сравнения равно и не равно для указателей, ссылающихся на объекты одного типа.

Спецификация:

СравнОп: ptr1ptr2Boolean;

  • Бинарные арифметические операции (сложение, вычитание):

БинОп: ptr1ptr2ptr3;

  • Унарные арифметические операции (инкремент и декремент):

УнарОп: ptr1ptr2.

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

  • Абсолютный адрес. Значение указателя представляет собой адрес области памяти, отведенной для объекта данных;

  • Относительный адрес. Значение указателя представляет собой смещение относительно базового адреса области памяти, отводимой для размещения объектов.

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

Арифметические операции над указателями выполняются как над обычными целыми числами, но значения, участвующие в операции, являются адресами оперативной памяти компьютера.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]