Представление информации в вычислительной технике Дисциплины "ЯЗЫКИ ПРОГРАММИРОВАНИЯ"

advertisement
ФГОБУ ВПО "СибГУТИ"
Кафедра вычислительных систем
Дисциплины
"ЯЗЫКИ ПРОГРАММИРОВАНИЯ"
"ПРОГРАММИРОВАНИЕ"
Представление информации
в вычислительной технике
Преподаватель:
Доцент Кафедры ВС, к.т.н.
Поляков Артем Юрьевич
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
Принципы фон Неймана (1,2)
1. Использование
двоичной
системы
счисления
в
вычислительных машинах. Цель: технически реализовать
устройства хранения информации в двоичной системе счисления
существенно проще, чем в устройства, основанные на
десятичной системе. Также проще реализовать выполнение
арифметических и логических операций.
2. Программное управление ЭВМ. Работа ЭВМ контролируется
программой, состоящей из набора команд. Команды
выполняются последовательно друг за другом. Цель:
вычислительное устройство становится универсальным и может
решать широкий круг задач, так как их программа может быть
изменена.
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
2
Принципы фон Неймана (3-4)
3. Память компьютера используется не только для хранения
данных, но и программ. Команды и данные кодируются в
двоичной системе счисления, поэтому для их хранения может
использоваться одно устройство. Цель: в определенных
ситуациях над командами можно выполнять те же действия, что
и над данными (изменять их!).
4. Ячейки памяти ЭВМ имеют адреса, которые последовательно
пронумерованы. Цель: возможность обращения к произвольным
ячейкам памяти в любой момент времени. Данный принцип
открыл
возможность
использовать
переменные
в
программировании.
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
3
Принципы фон Неймана (3-5)
5. Возможность условного перехода в процессе выполнения
программы. Цель: обеспечить управление процессом
вычислений. Не смотря на то, что команды выполняются
последовательно,
в
программах
можно
реализовать
возможность перехода к любому участку кода. Таким образом,
входные данные могут влиять на ход выполнения программы.
Данный принцип используется при организации ветвлений и
циклов в программировании.
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
4
Ячейка памяти
(элементная база)
Элементная база
Ферромагнетики
Транзистор
Конденсатор
Два устойчивых состояния!
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
5
Ячейка памяти
(логическое представление)
 Логическое представление ячейки не зависит от физических
компонентов, использованных для ее изготовления.
 Ячейка рассматривается как набор двоичных разрядов, которые
объединяются в группы из 8 штук, образующие байт.
1 0 1 0 1 0 1 0
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
6
Программные объекты(СИ)
Программа
Переменная
Переменная
Переменная
Функции
Хранение данных
5
Группы инструкций
+
10
15
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
7
Идентификация программных элементов(СИ)
Компьютерная программа средней сложности содержит тысячи
программных
объектов.
Для
того,
чтобы
уникально
идентифицировать их используются "идентификаторы".
Идентификатор представляет собой последовательность строчных
("a – z") и прописных ("A – Z") букв латинского алфавита, а также
цифр ("0 – 9") и знака подчеркивания ("_").
Идентификатор начинается либо с буквы, либо со знака нижнего
подчеркивания.
Идентификаторы используются для:
1) формирования имен объектов языка: переменных (ячеек памяти
для хранения данных) и функций (групп инструкций программы).
2) ключевых слов языка: типы данных (int, char, float),
управляющие конструкции (for, while, if).
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
8
Примеры идентификаторов(СИ)
Идентификатор – последовательность строчных ("a – z") и
прописных ("A – Z") букв латинского алфавита, а также цифр ("0 –
9") и знака подчеркивания ("_").
Идентификатор начинается либо с буквы, либо со знака нижнего
подчеркивания.
Допустимые
i
int
test1234
Q1W2E3R4
S123456789
_123456789
John_Deer
Недопустимые
123
_@
test~
1Q1W2E3R4
-S123456789
_1234=56789
John Deer
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
9
Характеристики переменных
Переменная – ячейка памяти, предназначенная для хранения
данных.
В языках высокого уровня переменная характеризуется:
1) именем (идентификатор), которое позволяет программисту
отличать
данную
ячейку
от
множества
других,
используемых в программе;
2) типом данного, который определяет какую информацию
можно хранить в данной ячейке (целые или вещественные
числа). Тип данного определяет:
 формат представления информации;
 диапазон хранимых значений (размер ячейки памяти);
 набором допустимых операций.
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
10
Тип данного
В современных процессорах для работы с целыми и
вещественными числами используются различные регистры и
наборы команд. Поэтому типизация данных присутствует уже в
языках низкого уровня.
Типизация данных в языках высокого уровня связана тем, что
обрабатываемые данные отличаются между собой по следующим
параметрам:
1) диапазон значений;
2) внутреннее представление в памяти;
3) занимаемый объем памяти;
4) набор команд процессора, предназначенный для их
обработки.
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
11
Базовые типы данных(СИ)
Базовые типы данных
Вещественные
числа
Целые числа
Беззнаковые
(unsigned)
char (1 байт)
float (4 байта)
Знаковые
(signed)
double (8 байт)
Текст
short (2 байта)
long double
(12 байт)
int (4 байта)
long (4/8 байт)
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
12
Целые числа
Беззнаковые целые
Обозначение
unsigned char
Размер, байт
1
Диапазон значений
[0; 255]
unsigned short
2
[0; 65535]
unsigned int
4
[0; 4294967295]
4 или 8
[0; 264 - 1] (8 байт)
unsigned long
Знаковые целые
Обозначение
[signed] char
Размер, байт
1
Диапазон значений
[-128; 127]
[signed] short
2
[-32768; 32767]
[signed] int
4
[–2147483648; 2147483647]
[signed] long
4 или 8
[-263; 263 - 1] (8 байт)
[x] – необязательный элемент
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
13
Объявление переменных
#include <stdio.h>
int main()
{
int i, IntegerVariable;
double d, D;
unsigned short short_val;
char c;
float f, Fl, f1, f2, f3, f458;
signed int sint;
}
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
14
Внутреннее представление
беззнаковых целых (1)
Беззнаковые (unsigned) целые числа в памяти хранятся в
виде двоичного представления исходного целого числа.
Тип unsigned char:
unsigned char c1 = 95 ↔ 9510 = 10111112 = 0101 11112
0 1 0 1 1 1 1 1
unsigned char c2 = 680 ↔
68010 = 10 1010 10002 = 10 1010 10002
1 0 1 0 1 0 0 0
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
15
Внутреннее представление
беззнаковых целых (2)
Беззнаковые (unsigned) целые числа в памяти хранятся в
виде двоичного представления исходного целого числа.
Тип unsigned short:
unsigned short s1 = 95 ↔
9510 = 10111112 = 0000 0000 0101 11112
0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1
unsigned short s2 = = 680 ↔
68010 = 10 1010 10002 = 0000 0010 1010 10002
0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
16
Внутреннее представление
знаковых целых (1)
0 1 0 1 1 1 1 1
Для представления знаковых целых требуется хранить знак.
Один бит способен хранить только 2 значения: 0 и 1, третьего
значения для обозначения знака " – " не предусмотрено.
В
таких
ситуациях
в
вычислительной
технике
осуществляется "кодирование". Т.е. определяется набор
правил, согласно которым по содержимому ячейки можно
понять – отрицательное в ней значение или нет.
Для кодирования знака в процессорах архитектуры Intel x86
и x86_64 используется "дополнительный код".
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
17
Дополнительный код
(десятичная система счисления)
Для применения дополнительного кода должно выполняться
следующее условие: доступно ограниченное количество D разрядов.
Рассмотрим дополнительный код для 4-разрядных десятичных
чисел (D=4). Дополнительный код x' для числа x строится следующим
образом:
x,

x'  
0 | x | 10000 | x |,
x0
x0
Обратное преобразование выполняется по правилу:
x' ,
0  x  5000

x
 (10000  x' ), 5000  x  10000
0
5000
Положительные
10000
Отрицательные
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
18
Дополнительный код
(арифметические действия)
Особенностью дополнительного кода является то, что сложение и
вычитание положительных и отрицательных чисел можно
выполнять одинаково. Рассмотрим пример:
x = 25, x' = 25
y = -15, y' = 10000 – 15 = 9985
x + y = 10
x' + y' = 25 + 9985 = 1 0010 = 10
x – y = 40
x' – y' = 25 – 9985 = 10025 – 9985 = 40
y + x = 10
y' + x' = 9985 + 25 = 1 0010 = 10
y – x = -40
z' = y' – x' = 9985 – 25 = 9960
|z| = 10000 – z' = 9960 = 40, z' > 50000 => z < 0
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
19
Дополнительный код
(Самостоятельно)
x = 3840, x' = ?
y = -1056, y' = ?
x + y = 2784
x' + y' = ?
x – y = 4896
x' – y' = ?
y + x = 2784
y' + x' = ?
y – x = -4896
z' = y' – x' = ?
|z| = ?
знак z - ?
Что будет, если y = -1500 ?
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
20
Дополнительный код
(двоичная система счисления)
В десятичной системе 10 разрядов, поэтому число отрицательно,
если его D-й разряд > 5. В двоичной системе разрядов всего два,
поэтому число отрицательно, если его D-й разряд = 1 и
положительно, если D-й разряд = 0. Получим представление
десятичных
чисел,
рассмотренных
ранее
в
двоичном
дополнительном коде:
D = 8 (один байт)
x = 25 > 0 => x' = 2510 = 1 10012
y = -15, |y| = 1510 = 11112,
y' = 1 0000 00002 – 11112 = 1111 00012
x' + y' = 1 1001 + 1111 0001 = 1 0000 10102 = 10102 = 102
z' = y' – x' = 1111 00012 – 1 10012 = 1101 10002
|z| = 1 0000 00002 – 1101 10002 = 0010 10002 = 4010
z' ≥ 1000 0000 => z < 0
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
21
Интерпретация значения ячеек памяти
a2 = x1x2x3x4x5 (a2 = 101012)
a10 = x1 ∙ 24 + x2 ∙ 23 + x3 ∙ 22 + x4 ∙ 21 + x5 ∙ 20
(a10 = 1 ∙ 24 + 0∙23 + 1 ∙ 22 + 0 ∙ 21 + 1 ∙ 20 = 21)
0 1 0 1 0 1 0 1
a10 = ?
1 1 0 1 0 1 0 1
a10 = ?
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
22
Выбор типа данного
Тип
Беззнаковый
Знаковый
char
[0; 255]
[-128; 127]
short
[0; 65535]
[-32768; 32767]
[0; 4294967295]
[–2147483648; 2147483647]
int
1. Возраст человека
2. Расстояние между городами
(Новосибирск-Москва ~ 3000 км)
3. Температура на улице
4. Скорость автомобиля
5. Высота над уровнем моря
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
23
Выбор типа данного
Тип
Беззнаковый
Знаковый
char
[0; 255]
[-128; 127]
short
[0; 65535]
[-32768; 32767]
[0; 4294967295]
[–2147483648; 2147483647]
int
6. Государственный долг США
(Табло в Нью-Йорке около Таймс-сквер)
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
24
Внутреннее представление
вещественных чисел
Вещественные числа помимо знака имеют десятичную запятую
(десятичная точка), которая также нуждается в кодировании.
В настоящее время для представления вещественных чисел
используется формат с плавающей точкой.
В этом случае вещественное число f представляется в виде:
f = s∙0,m ∙10 p-q
где s  { 1, -1 } – знак,
m – мантисса – беззнаковое целое число.
p – беззнаковое целое число, разность которого с константой q
дает нужную степень 10.
Например, пусть константа q = 127, тогда:
f = 10.14 = 1∙0,1014 ∙ 10129 - 127
s = 1, m = 1014, p = 129
f = (s, m, p) = (1, 1014, 129)
f = - 0,0015 = (-1)∙0,15 ∙ 10125 - 127
s = -1, m = 15, p = 125
f = (s, m, p) = (-1, 15, 125)
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
25
Внутреннее представление
вещественных чисел (самостоятельно)
f = s∙0,m ∙10 p-q
где s  { 1, -1 } – знак,
m – мантисса – беззнаковое целое число.
p – беззнаковое целое число, разность которого с константой q
дает нужную степень 10.
Например, пусть константа q = 127, тогда:
f = 150,5
s = ?, m = ?, p = ?
f = 0,00101
s = ?, m = ?, p = ?
f = 15∙10-10
s = ?, m = ?, p = ?
f = 1,1984
s = ?, m = ?, p = ?
f = 15∙10-10
s = ?, m = ?, p = ?
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
26
Тип данного float
Размер, выделяемый для хранения:
4 байта (32 бита)
(e, m ,s) = s1.m  2(p – q)
m: 23 бит; e: 8 бит; s: 1 бит,
q = 28-1 – 1 = 127
0
1
22
23
24
m
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
30
p
31
s
27
Диапазон значений вещественных типов
Обозначение
unsigned long
Размер, байт
8
Диапазон значений
264 – 1 ~ 1.84·1019
(~19 значащих цифр)
Идентификатор
Размер, байт
Диапазон значений
от ±3.4·10-38
до ±3.4·1038
(~ 7 значащих цифр)
от ±1.7·10-308
до ±1.7·10308
(~ 15 значащих цифр)
float
4
double
8
long double
12
от ±1.2·10-4932
до ±1.2·104932
(~22 значащие цифры)
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
28
Преобразование типов данных
 Типы данных имеют различное представление в памяти
 При присваивании происходит преобразование типа
данных rvalue к типу данных lvalue.
<целый тип> = <целый тип>
1) диапазон rv = lv - простое копирование: 1010 = 1010
2) диапазон rv < lv
0001010
- добавление незначащих нулей:
3) диапазон rv > lv
1011010
- отбрасывание старших разрядов:
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
29
Преобразование типов данных (2)
 Типы данных имеют различное представление в памяти
 При присваивании происходит преобразование типа
данных rvalue к типу данных lvalue.
<целый тип> = <вещественный тип>
1) отбрасывание дробной части: 18.546
2) если целая часть не помещается в диапазон lvalue, то
результат
не
определен:
float f = 1E20;
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
30
Преобразование типов данных (3)
 Типы данных имеют различное представление в памяти
 При присваивании происходит преобразование типа
данных rvalue к типу данных lvalue.
<вещественный тип> = <целый тип>
Возможно
отбрасывание
попадающих в мантиссу:
младших
разрядов,
не
int i;
float f;
i = 2147483582, f = 2147483520.0
i = 2147483583, f = 2147483520.0
i = 2147483584, f = 2147483648.0
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
31
Преобразование типов данных (4)
 Типы данных имеют различное представление в памяти
 При присваивании происходит преобразование типа
данных rvalue к типу данных lvalue.
<вещественный тип> = <вещественный тип>
1) диапазон rv = lv - простое копирование.
2) диапазон rv < lv
0001010
- добавление незначащих нулей:
3) диапазон rv > lv возможно переполнение: +/-inf или
обнуление.
float f;
double d = 1E50;
f = d; // f == inf
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
32
Представление текстовой информации
Хранение информации возможно
только в виде двоичных чисел.
Текст не является числом или набором чисел!
Требуется способ преобразовать текст
в набор чисел (оцифровать)
Текст имеет естественное разбиение на:
1. слова
2. буквы
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
33
Представление текстовой информации (2)
• Текст кодируется посимвольно.
• Каждому символу сопоставляется уникальное
число. Данное отображение называется
кодировкой. Пример: таблица ASCII-кодов.
Симв. Код16 Код10
'a'
61
98
Симв. Код16 Код10
'1'
30
48
'b'
'c'
'd'
62
63
64
99
100
101
'2'
'3'
'4'
31
32
33
49
50
51
'e'
'f'
65
66
102
103
'5'
'6'
34
35
52
53
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
34
Представление текстовой информации (3)
•
•
Полная версия таблицы ASCII-кодов.
Коды указаны в шестнадцатеричной системе счисления
.0
.1
.2
.3
.4
.5
.6
.7
.8
.9
.A
.B
.C
.D
.E
.F
BS
TAB
LF
VT
FF
CR
SO
SI
1. DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC
FS
GS
RS
US
0. NUL SOH STX ETX EOT ENQ ACK BEL
2.
!
"
#
$
%
&
'
(
)
*
+
,
—
.
/
3.
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
4.
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
5.
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
6.
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
7.
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
DEL
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
35
Download