Правила записи программы на языке Си 5 Правила формального описания синтаксиса языка программирования 6
Вид материала | Лекции |
Содержание4.Понятие о типах данных. 4.1.Системы счисления. Представление данных в ЭВМ. 4.2.Основные типы данных языка Си |
- Правила преобразований из одного типа в другой и правила приведения типов в языке Object, 19.03kb.
- Оформление программы на языке Паскаль. Оператор вывода. Описание переменных. Оператор, 186.34kb.
- Программа наименование дисциплины Латинский язык (1,2 уровни), 154.48kb.
- Экзаменационные вопросы по курсу "Методы программирования", 32.44kb.
- Вопросы по курсу Программирование на языке высокого уровня (яву), 102.97kb.
- Структура программы в языке программирования С++. Обмен данными между функциями (параметры, 37.24kb.
- Программа курса " Азы программирования", 26.19kb.
- Структура программы языка Турбо Паскаль Программа на языке Турбо Паскаль имеет вид, 792.5kb.
- Эволюция языков программирования, 493.92kb.
- Структура программы на языке Turbo Pascal, 26.15kb.
4.Понятие о типах данных.
Тип данных определяет структуру объекта данных, множество его разрешенных значений и множество операций, которые можно над ним выполнять. Объекты различных типов требуют различного количества памяти для их хранения и различных команд процессора для выполнения действий над ними.
4.1.Системы счисления. Представление данных в ЭВМ.
В современном мире для записи числовой информации используют позиционные системы счисления, в которых числа записываются с помощью ограниченного количества цифр, а фактический вес цифры в результирующем числе определяется не только ее значением, но и позицией, которую она занимает в записи числа. Вес соседних позиций отличается в M раз, где M - основание системы счисления.
Пусть, например, имеем запись числа
an ... a3 a2 a1 a0
тогда его значение можно вычислить по следующей формуле
an*Mn + ... + a3*M3 + a2*M2 + a1*M1 + a0*M0 ,
где an...a0 - цифры из записи числа.
Максимальное значение числа без знака, которое может быть представлено N разрядами позиционной системы счисления определяется как
MN - 1 .
В общепринятой десятичной системе счисления для записи чисел используются десять цифр 0,1,2,3,4,5,6,7,8,9. Основание системы счисления - 10. Значение числа определяется, например, так
9721 (10) = 9*103 + 7*102 + 2*101 + 1*100
В вычислительной технике, кроме десятичной, широко используются двоичная, восьмеричная и шестнадцатеричная системы счисления. Все данные внутри ЭВМ представлены в двоичной системе, поскольку в этом случае достаточно всего двух цифр, а электронные схемы, как правило, тоже имеют два различных состояния. Десятичная, восьмеричная и шестнадцатеричная системы используются при выводе информации для пользователя, недостающие цифры шестнадцатеричной системы счисления заменяются буквами A,B,C,D,E,F.
Приведем несколько примеров:
1010 (2) = 1*23 + 0*22 + 1*21 + 0*20 = 10 (10)
2701 (8) = 2*83 + 7*82 + 0*81 + 1*80 = 1473 (10)
F4A (16) = 15*162 + 4*161 + 10*160 = 3914 (10)
Для перевода чисел из десятичной системы счисления в любую другую нужно последовательно делить его на основание новой системы счисления, при этом остатки от каждого деления будут представлять собой цифры из записи числа в новой системе, например:
1473 : 8 = 184 остаток 1
184 : 8 = 23 остаток 0
23 : 8 = 2 остаток 7
2 : 8 = 0 остаток 2
---------------------------
1473 (10) = 2701 (8)
Перевод чисел из двоичной системы счисления в восьмеричную или шестнадцатеричную осуществляется путем разбиения двоичного числа на триады или тетрады и записи вместо них соответствующей восьмеричной или шестнадцатеричной цифры. Например:
0101 1011 1111 1100 (2) = 5BCF (16) = 23548 (10)
5 11=B 15=F 12=C
0 101 101 111 111 100 (2) = 55774 (8) = 23548 (10)
5 5 7 7 4
Обратное преобразование выполняется путем записи вместо восьмеричной или шестнадцатеричной цифры соответствующей двоичной триады или тетрады.
Целые беззнаковые числа хранятся в памяти ЭВМ в виде двоичных чисел, занимающих N двоичных разрядов. Диапазон чисел в этом случае от 0 до 2N-1. Целые числа со знаком, записанные в те же N двоичных разрядов будут иметь диапазон от -2(N-1) до 2(N-1)-1 .
Действительные числа хранятся в памяти ЭВМ в специальном формате с плавающей точкой. При этом часть двоичных разрядов ячейки хранит мантиссу числа со знаком, а другая часть - порядок числа. Диапазон действительных чисел определяется количеством двоичных разрядов, отведенных под порядок, а их точность - количеством разрядов под мантиссу.
Символы представлены в ЭВМ в виде соответствующих целочисленных кодов, хранимых в двоичной форме. Обычно под символ отводится один байт памяти, поэтому количество различных символов равно 28-1=255.
4.2.Основные типы данных языка Си
Язык Си относится к языку с жестко определенными типами данных: каждое имя всегда обозначает объект некоторого типа, причем этот тип нельзя изменить до конца выполнения программы.
Назначение типа имени осуществляется с помощью описания типа.
БНФ:
описание_типа =
["const "] имя_типа " " имя ["=" константа]
{ "," имя ["=" константа] } ";"
Если в описании присутствует ключевое слово const, то описываемое данное объявляется как немодифицируемое, то есть его значение не может быть изменено в процессе выполнения программы.
Если в описании имеется знак "=" и константа соответствующего типа, то вместе с объявлением переменной происходит ее инициализация, то есть присваивание начального значения.
В языке Си предопределены несколько имен типов:
БНФ:
имя_типа = "int" | "short" | "long" | "char" |
"float" | "double"
int - целый длиной 2 байта, диапазон значений -32768 ... +32767;
short - целый короткий, для IBM PC аналогичен int;
long - целый длиной 4 байта, диапазон значений
char - символьный длиной 1 байт, его можно рассматривать как целое -128...+127 (иногда 0...255);
float - тип данных с плавающей точкой, длиной 4 байта, вещественное число с диапазоном значений от до и 6-ю значащими цифрами;
double - тип данных с плавающей точкой, длиной 8 байт, вещественное число с диапазоном значений от до и 14-ю значащими цифрами;
Примеры описаний:
int a, b=4, c; /* описывает целые переменные a,b,c */
/* и инициализирует переменную b */
float speed, line; /* описывает вещественные переменные */
/* speed, line */
const double pi=3.14159; /* описывается имя pi, которое */
/* используется как константа */
/* типа double */
Вещественный тип данных следует использовать в тех случаях, когда данное в принципе может иметь дробную часть. Например, его надо использовать для описания почти всех физические величин: длины, массы, времени и т.д. Иногда величина, вообще говоря, целая, но большая настолько, что типа данных long не хватает. В этом случае тоже используется вещественный тип данных. Однако необходимо учитывать, что все арифметические действия с вещественными типами выполняются приближенно.
Целый тип данных часто используется для организации флагов, счетчиков, индексов и т.д.