Правила записи программы на языке Си 5 Правила формального описания синтаксиса языка программирования 6

Вид материалаЛекции

Содержание


4.Понятие о типах данных.
4.1.Системы счисления. Представление данных в ЭВМ.
4.2.Основные типы данных языка Си
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   28

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 не хватает. В этом случае тоже используется вещественный тип данных. Однако необходимо учитывать, что все арифметические действия с вещественными типами выполняются приближенно.

Целый тип данных часто используется для организации флагов, счетчиков, индексов и т.д.