- •1.1. Цель работы.
- •1.2. Задание на подготовку к лабораторной работе.
- •1.3. Порядок выполнения работы.
- •1.4. Варианты заданий и условия задач.
- •1.5. Вопросы для самопроверки.
- •1.6. Методические указания.
- •1.6.1 Машинное представление целочисленных типов данных.
- •1.6.2 Машинное представление вещественных типов данных.
- •1.6.3 Машинное представление символьных типов данных.
- •1.6.4 Машинное представление логических (булевских) типов данных.
- •1.6.5 Машинное представление скалярных типов данных.
1.4. Варианты заданий и условия задач.
Составить программу на языке ПАСКАЛЬ, содержащую простые (все целые типы, символьные, логические и вещественный тип real ) и скалярные (перечислимый и ограниченный) типы данных и операции над ними (по выбору студента), согласно заданного варианта. Примерный вид программы приведен в Приложении 3.
Варианты заданий приведены в таблице 1.1 (логические переменные в таблице не приведены, но они должны присутствовать в программе).
1.5. Вопросы для самопроверки.
1. Каковы особенности машинного представления целочисленных типов данных?
2. Каковы особенности выполнения арифметических действий над операндами целочисленных типов?
3. В чем заключается особенность машинного представления отрицательных целых чисел в памяти ЭВМ?
4. Машинное представления вещественных типов данных в памяти ЭВМ.
5. Почему операция точного сравнения ( = ) вещественных чисел, особенно полученных в результате вычислений, является "опасной", т. е. во многих случаях может привести к непредсказуемым результатам? Каким образом нужно ее модифицировать, чтобы получить корректный результат сравнения?
6. Отличие сложного типа Comp (целое в формате вещественного) от других вещественных типов данных и особенности его машинного представления.
7. Машинное представления символьного типа данных в памяти ЭВМ.
8. Понятие системы ASCII. Основная таблица кодов ASCII и ее особенности.
9. Расширение ASCII. Кодовые таблицы для поддержки символов кириллицы.
10. Основные характеристики стандарта Unicode.
11. Операции над символьным типом данных.
12. Особенности машинного представления логических типов данных.
13. Особенности машинного представления перечислимых типов данных.
14. Операции над перечислимыми типами данных.
15. Особенности представления и использования ограниченного типа данных.
16. Структура файла компоновки программы.
17. Как влияет опция Word align data на размещение данных в памяти ЭВМ?
1.6. Методические указания.
1.6.1 Машинное представление целочисленных типов данных.
Форматы внутреннего представление целочисленных типов данных, использующиеся в языке Turbo Pascal 7.0 представлены в таблице 1.2.
Таблица 1.2.
Форматы внутреннего представление целочисленных типов данных в TP 7.0.
Тип |
Диапазон |
Как хранится |
Длина |
Byte (Байт) |
0…255 |
Как байт без знака |
1 байт |
ShortInt (Короткое целое) |
-128…+127 |
Как байт со знаком |
1 байт |
Word (Слово) |
0…65535 |
Как слово без знака |
2 байт |
Integer (Целое) |
-32768…+32767 |
Как слово со знаком |
2 байт |
LongInt (Длинное целое) |
-2147483648… +2147483647 |
Как двойное слово со знаком |
4 байта |
В знаковых двоичных числах старший (левый) бит определяет знак числа: если он равен 0, то число считается положительным, а если он равен 1 - то отрицательным. Так как число нуль содержит во всех разрядах нули, то оно фактически относится к положительным числам.
В IBM PC-совместимых компьютерах (впрочем, как и в большинстве других современных мини- и микро-ЭВМ) принято соглашение, называемое иногда принципом "младшее - по младшему адресу", заключающееся в том, что младший байт "слова" (в данном случае под "словом" понимаются любые два смежные байта в памяти) имеет меньший адрес, а старший байт - больший адрес. Для пользователя, обычно, это несколько неудобное соглашение незаметно (он редко испытывает необходимость работать на уровне битов), но о нем следует помнить программисту при анализе действий шины и просмотре распечатки (дампа) содержимого памяти. В частности типы Word, Integer и LongInt хранятся в памяти ЭВМ в обратном (перевернутом) виде: вначале (по меньшему адресу) записывается менее значащий байт, а последним - наиболее значащий. Например:
|
Варианты заданий. Таблица 1.1. |
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
N п/п |
Переменные целого типа |
Переменные символьного типа |
Переменная типа real |
Переменные перечислимого типа (для заданного типа) |
Переменные ограниченного типа (для заданного типа) |
|
|||||
Byte |
ShortInt |
Word |
Integer |
LongInt |
|
||||||
|
|||||||||||
1 |
241 |
-120 |
$A05 |
4507 |
$FA1603 |
'S', '@', '4' |
2.5 |
Дни недели |
Year = 1900..1999; |
|
|
2 |
$F4 |
24 |
46200 |
-30000 |
50000 |
'8', '$', ',' |
0.5 |
Месяцы года |
Hours = 0..23; |
|
|
3 |
89 |
-30 |
$ABCD |
$A50 |
$ABCDEF |
'0', '%', '!' |
-1.25 |
Арифметические операторы |
SmallRusBukva = 'а'..'я'; |
|
|
4 |
$8F |
100 |
32456 |
$FA00 |
-1000000 |
'9', ';', '\' |
3.75 |
Сезоны года |
Index = 0..2*N-1; |
|
|
5 |
167 |
-10 |
$1234 |
8199 |
$12345678 |
'7', '*', '>' |
-0.5 |
Гласные буквы |
Data = 1..31; |
|
|
6 |
$FE |
$1A |
1234 |
-1030 |
12345678 |
'6', '?', '<' |
-0,25 |
Ноты |
Rost_Chel = 50..250; |
|
|
7 |
84 |
$34 |
$A123 |
$9999 |
-12345678 |
'1', '+', 'Q' |
0.375 |
Континенты |
SymDigit = '0'..'9'; |
|
|
8 |
141 |
$7A |
10240 |
9999 |
-500000 |
'5', '=', 'N' |
-3.75 |
Единицы длины |
Kurs = 1..5; |
|
|
9 |
$A4 |
-100 |
32165 |
-9999 |
$AD61 |
'3', '#', 'F' |
1.5 |
Цвета спектра |
SmallBukva = 'a'..'z'; |
|
|
10 |
189 |
64 |
$AAAA |
-8192 |
$1234 |
'2', ':', '|' |
3.5 |
Члены бригады |
Index = 0..20; |
|
|
11 |
$AF |
-64 |
$F000 |
8192 |
1234 |
'Z', '&', '~' |
-0.75 |
Металлы |
No_Mes = 1..12; |
|
|
12 |
67 |
$64 |
300 |
$8111 |
-1234 |
'^', '(', '9' |
-1.5 |
Газы |
Diapazon = 10..25; |
|
|
13 |
$AA |
-34 |
34 |
$543 |
560300 |
'D', ')', '5' |
-0.125 |
Полупроводники |
DayInYear = 1..365; |
|
|
14 |
100 |
$30 |
$34 |
543 |
-256 |
'{', 'J', '?' |
-0.375 |
Диэлектрики |
Ocenka = 2..5; |
|
|
15 |
41 |
$60 |
$1AC |
-543 |
$98765 |
'}', 'A', '^' |
-1.0 |
Кафедры |
Semestr = 1..10; |
|
|
16 |
$41 |
-80 |
2048 |
$8AF |
$DA00 |
'[', 'a', '4' |
2.0 |
Факультеты |
BigBukva = 'A'..'Z'; |
|
|
17 |
98 |
$5F |
20480 |
$1AAA |
-98765 |
']', 'V', '0' |
2.25 |
Должность |
Index = -10..20; |
|
|
18 |
$F0 |
60 |
$DA |
-16300 |
$256 |
'W', '_', '9' |
-2.5 |
Ученая степень |
Minuts = 0..59 |
|
|
19 |
76 |
$3A |
576 |
11111 |
-222888 |
'L', '<', '0' |
4.5 |
Ученое звание |
RusBukva = 'А'..'я'; |
|
|
20 |
$6F |
30 |
32456 |
-514 |
$DDCC |
'U', '$', '8' |
-3.5 |
Учебные курсы |
DayOfWeek = 1..7 |
|
|
21 |
48 |
-48 |
$1BBB |
$D206 |
456219 |
'R', '5', '%' |
-2.0 |
Мебель |
Diapazon = -5..15; |
|
|
22 |
$48 |
-60 |
$C1DA |
514 |
2255 |
'G', '@', '!' |
-4.5 |
Машины |
BigRusBukva = 'А'..'Я'; |
|
|
23 |
125 |
$4D |
21500 |
$11111 |
-1004 |
'Y', '6', ')' |
1.0 |
Растения |
Index = 20..30; |
|
|
24 |
235 |
$70 |
$D000 |
16300 |
-98765 |
'X', '+', '0' |
0.25 |
Животные |
Digit = 0..9; |
|
|
25 |
$D6 |
34 |
$AF |
-11111 |
256 |
'M', '7', '&' |
0.125 |
Одежда |
ASCII_Kod =0..255; |
|
|
W
ord:
$102
LongInt: $1020304
Адресом "слова" считается адрес его младшего байта (в приведенных примерах это адреса байта 04 для LongInt и байта 02 для Word).
Следует отметить, что целочисленные типы данных образуют, так называемое, кольцо чисел. На рис 1.1 представлено такое кольцо для чисел типа ShortInt (короткое целое). Если в языке программирования отсутствует
контроль
выхода за пределы допустимого диапазона,
или он отключен, то при добавлении 1 к
максимальному числу (в данном случае,
+127) будет получено максимальное
отрицательное число (-128).
И
наоборот, при вычитании из минимального
отрицательного числа (-128) единицы, будет
получено максимальное положительное
число (+127). Аналогичные кольца характерны
и для других целочисленных типов.
Для физического представления целых отрицательных чисел обычно используется форма их представления, называемая дополнительным кодом. Использование дополнительного кода позволяет заменить операцию вычитания на операцию сложения уменьшаемого числа с дополнительным кодом вычитаемого. Для того чтобы представить целое отрицательное число в дополнительном коде, необходимо представить это число в шестнадцатеричном коде (без учета знака), затем выполнить его побитовую инверсию и к результату прибавить 1.
Например, для того, чтобы получить физическое представление целого отрицательного числа -1607, необходимо:
1) Получить физическое представление положительного числа 1607 |
0000 0110 0100 01112 (064716) |
2) Получить обратный код путем инверсии битов |
1111 1001 1011 10002 |
3) Прибавить к полученному числу 1 |
1111 1001 1011 10012 - это и есть физическое представление числа -1607, (или F9В916). |
В связи с тем, что разрядность современных процессоров увеличивается, в современных языках программирования сейчас различают: аппаратно-зависимые типы данных разрядность которых определяется величиной разрядной сетки процессора (или, как говорят, - “естественным размером целого”) и аппаратно-независимые типы данных (или типы с фиксированной разрядностью), разрядность которых не зависит от используемого процессора. В частности, в среде Delphi – дальнейшем развитии языка Turbo Pascal, целочисленные типы Cardinal и Integer являются аппаратно-зависимыми типами данных (без знака и со знаком соответственно), разрядность которых определяется величиной разрядной сетки. В версиях Delphi 5 и 6 они являются 32-х разрядными, однако, в дальнейшем их размер, несомненно, увеличится до 64 разрядов и т. д. В случае, если в приложении необходимо иметь гарантированную разрядность целочисленного типа данных, не зависящую от аппаратных средств и версий Delphi, то рекомендуется применение целочисленных типов с фиксированной разрядностью: Byte, Word, LongWord - для беззнаковых целых типов и ShortInt, SmallInt, LongInt, Int64 – для знаковых целых типов.
Арифметические действия над операндами целочисленного типа предполагают 8-битовую, 16-битовую и 32-битовую точность в соответствии со следующими правилами:
- Тип целой константы представляет собой встроенный целочисленный тип с наименьшим диапазоном, включающим значение этой целой константы.
- В случае бинарной операции (операции, использующей два операнда), оба операнда преобразуются к их общему типу перед тем, как над ними совершается действие. Общим типом является встроенный целочисленный тип с наименьшим диапазоном, включающим все возможные значения обоих типов. Например, общим типом для целого и целого длиной в байт является целое, а общим типом для целого и целого длиной в слово является длинное целое. Действие выполняется в соответствии с точностью общего типа и типом результата является общий тип.
- Выражение справа в операторе присваивания вычисляется независимо от размера или типа переменной слева.
- Любые операнды размером в байт преобразуются к промежуточному операнду размером в слово, который совместим перед выполнением арифметической операции с типами Integer и Word.
Значение одного целочисленного типа может быть явным образом преобразовано к другому целочисленному типу с помощью приведения типов.
