Основные типы данных, операции и выражения 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Основные типы данных, операции и выражения



 

Все используемые в программе объекты (переменные, именованные константы, функции и др.) должны быть предварительно определены (описаны); в описаниях указываются имена, их типы и, возможно, начальные значения. Константам тоже могут быть присвоены имена — синонимы констант. Имена (идентификаторы) могут состоять из букв латинского алфавита, цифр и символа подчеркивания "_", который считается буквой. Первый символ идентификатора должен быть буквой. Строчные и прописные буквы различаются, например Beta, beta и ВЕТА - различные имена. Число символов в имени практически не ограничено. В качестве имен переменных нельзя использовать зарезервированные слова вроде if, else, for, char, int и т.д. Все служебные слова должны быть набраны строчными (малыми) буквами.

 

Т и п ы д а н н ы х.

 

Тип данных определяет:

· размер памяти, занимаемый определяемым объектом и его внутреннее (машинное) представление в памяти;

· диапазон допустимых значений, которые может принимать определяемый объект;

· множество допустимых операций, которые могут быть применимы к определяемому объекту.

 

В языке С++ используются следующие основные типы данных:

char (символьный, 1 байт);

wchar_t (расширенный символьный, 2 байта);

bool (логический, 1 байт);

int (целый, 2 или 4 байта);

float (вещественный или с плавающей точкой, 4 байта);

double (вещественный с двойной точностью, 8 байтов).

 

Существуют 4 модификатора типа, уточняющих внутреннее представление и диапазон значений основных типов:

short (короткий);

long (длинный);

signed (знаковый);

unsigned (беззнаковый).

 

 

Модификаторы signed, unsigned, short, long можно применятьк целочисленным типам; типы signed и unsigned можно использовать с типом char, а модификатор long – с типом double. Допустимые комбинации базовых типов и модификаторов, а также размер и диапазоны изменения соответствующих данных приведены в следующей таблице.

 

Таблица 2.1. Размеры значений разных типов в байтах и диапазоны их изменения в 32-разрядной среде

 

Тип Размер в байтах Диапазон изменения
char   -128 … 127
unsigned char   0 … 255
signed char   -128 … 127
int   -2 147 483 648 … 2 147 483 647
unsigned int   0 … 4 294 967 295
signed int   Аналогичен типу int
short int   -32 768 … 32 767
unsigned short int   0 … 65 535
signed short int   -32 768 … 32 767
long int   Аналогичен типу int
signed long int   Аналогичен типу signed int
unsigned long int   Аналогичен типу unsigned int
float   3.4Е-38 … 3.4Е+38
double   1.7Е-308 … 1.7Е+308
long double   3.4Е-4932 … 3.4Е+4932
bool - ИСТИНА или ЛОЖЬ
wchar_ t   0 … 65535

 

 

В более ранних реализациях С++-компиляторов тип int может быть эквивалентен short int, т.е. данные зтого типа занимают в памяти 2 байта. В C++ предусмотрен сокращенный способ объявления unsigned-, short- и long -значений целочисленного типа: при объявлении int -значений достаточно использовать слова unsigned, short и long, не указывая тип int.

 

Ц е л ы е константы и константы с п л а в а ю щ е й т о ч к о й записываются в общепринятой для языков программирования форме:

 

13, -941, 0, 76; 13.035, 13Е+0, -1.76, 0.123е-2, 6.02Е23

 

В языке С/C++ существуют правила записи восьмеричных и шестнадцатеричных целых чисел: если число начинается с нуля, то это восьмеричная константа: 037, 0776; начальные 0Х или 0х указывают на шестнадцатеричное число: 0хf37, 0Х7FA.

Тип целочисленных констант определяется в соответствии с их видом; этот тип можно указать явно с помощью суффиксов L, l (long) и U, u (unsigned). Разрешается комбинировать оба суффикса в любом порядке, например:

 

125L, 0x75u, 137uL

 

Константа с плавающей точкой состоит из целой десятичной части, точки, дробной десятичной части и, быть может, степени, которая состоит из буквы Е (или е), за которой следует десятичный порядок. Перед показателем степени может стоять знак (+ или –). Либо десятичная точка, либо показатель, но не оба одновременно, могут быть опущены. Могут быть опущены либо целая, либо дробная части.

 

С и м в о л ь н а я к о н с т а н т а состоит из заключенного в одиночные кавычки символа, например ‘#'. Символы в языке С/С++ фактически являются целочисленными значениями из диапазона 0..255. Их числовое значение соответствует внутреннему (машинному) представлению символов в некотором принятом стандартном коде. Например, в коде ASCII значение символа ‘А’ равно 65, ‘b’ — 98, ‘2’ — 50. Символы, не имеющие графического изображения, и некоторые специальные символы, записывают следующим образом: ‘\n’ — новая строка, ‘\t’ — табуляция, ‘\0’ — нуль(пусто), ‘\\’ — обратная косая черта, ‘\’’ — апостроф, ‘ \” ‘ — кавычка, ‘\b’ — возврат на шаг, ‘\r’ —возврат каретки, ‘\f’ — перевод страницы. Такая комбинация выглядит как два символа, но фактически это один символ.

Кроме этого, любой символ может быть представлен последовательностью трёх восьмеричных (‘\ООО’) либо двух шестнадцатеричных (‘\xHH’) цифр. Например, символ ‘A’ (латинская буква) можно ещё записать как ’\101’, либо ‘\x41’.

С т р о к о в а я константа — это последовательность символов, заключенная в двойные кавычки, например "ИНТЕРЕСНОЕ \t СООБЩЕНИЕ\n" или "" (пустая строка). В конце каждой такой строки (в том числе и пустой) транслятор автоматически помещает нулевой символ \0.

Присвоение константам символических имен происходит, как уже отмечалось, с помощью препроцессорного утверждения #define либо с помощью описателя const. Например:

 

#define MAX 100

const int MAX = 100;

const char name[] = “ ******************** ”;

 

К о н с т а н т ы л о г и ч е с к о г о типа в С++ могут принимать только значения true и false. Вместо них с успехом используются их машинные эквиваленты – целые константы 1 и 0 соответственно.

Тип void.. К основным типам, кроме перечисленных выше, относится особый тип – void. Множество значений этого типа пусто. Используется для указания пустого списка аргументов функции; для определения типа функции, не возвращающей значения в точку вызова и др.

Описание переменных.

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

 

Описание переменных в общем случае имеет вид:

 

[класс памяти][const]тип имя[=значение [,имя [=значение…]]];

 

Поясним назначение составных частей этого описания.

 

· Необязательный описатель класс памяти может принимать одно из значений: auto, extern, static, register. Об этом описателе мы поговорим позже.

· Модификатор const служит для определения именованной константы; присвоенное ей значение изменить нельзя.

· Поле тип есть один из описателей основных типов (char, int, float, и т.д.)

· Имя переменной выбирается по ранее рассмотренным правилам. При этом может осуществляться её начальная инициализация – переменной присваивается заданное значение.

В одном операторе можно описать несколько переменных одного типа, разделяя их запятыми.

 

Примеры.

int a = 25, b, c = -37;

const char ch = ‘\002’; double x, y, eps = 1.0e-5;

double pi = 3.14;

char c, str; float х, dl;

 

С каждой переменной связаны две её важные характеристики: область действия (область видимости) и длительность существования («время жизни»). «Время жизни» переменной связано с выделением памяти под переменную и её освобождением. Область действия определяет ту часть программы, где описываемая переменная доступна для использования. В зависимости от области действия переменная может быть локальной или глобальной.

 

Атрибут класс памяти определяет «время жизни» переменной и может воздействовать на её область действия, которая зависит не только от самого описателя, но и от его местонахождения в теле программы. Если переменная определена внутри блока, то она называется локальной и область её действия – от точки описания до конца блока, включая все вложенные блоки. Если же переменная определена вне всяких блоков, она называется глобальной и областью её действия будет файл, в котором она определена – от точки описания до конца файла.

 

А теперь подробнее об описателях класса памяти.

 

Описатель auto определяет локальную переменную в блоке (функции), которая доступна только в пределах данного блока. Память под эту переменную выделяется в сегменте стека при активизации блока (функции), и освобождается при его завершении. Этот описатель принят по умолчанию и практически не используется.

Описатель extern служит для объявления глобальной переменной, которая определена в другом месте, вне всяких функций и, быть может, даже в другом файле. Эта переменная доступна всюду в других функциях, если они расположены текстуально ниже точки её определения, либо эта переменная в них объявлена с описателем extern.

Переменная класса static ведёт себя как локальная переменная auto, но выделение памяти и начальная инициализация такой переменной осуществляется только при первой активизации блока (функции), в котором определена static – переменная. Поэтому такая переменная от вызова к вызову функции сохраняет своё предыдущее значение.

Переменная с описателем класса памяти register предположительно размещается компилятором в регистрах микропроцессора для ускорения работы с описываемой переменной. Если такая возможность отсутствует, описатель registr заменяется на auto.

О классах памяти для функций более детально будет сказано далее (в разделе, посвященном функциям).

 

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

 

При описании переменных следует различать их определение и объявление. Объявление только информирует компилятор о типе и классе памяти объявляемой переменной, а определение предполагает, кроме того, и выделение памяти под переменную в соответствии с её типом. Чаще всего объявление и определение переменной совпадают. Однако для глобальных переменных это не так: такая переменная должна быть определена только один раз, а её объявление может встречаться в теле программы многократно.

 

 

Пример.

int x = 145; // определение внешней переменной

int main()

{

extern int y; // описание делает доступной внешнюю переменную y

extern int x; // это описание здесь не обязательно, но необходимо, если

// переменная х определена в другом файле

x=x+1; y=y-1;

cout << “x = “ << x << endl;

cout << “y = “ << y;

return 0;

}

int y = 541; // определение внешней переменной.

 

 

В результате на экран будет выведено:

 

х = 146

у = 540

 

Одна из особенностей языка С/С++, непривычная для тех, кто знаком с другими языками программирования – относительно либеральные правила, определяющие, когда, где и как должны описываться данные. Например, в отличие от языка Паскаль, требующего, чтобы переменные были полностью описаны до их использования в разделе описания данных, в языке С/С++ описание данных и их инициализация может возникнуть практически в любой точке программы, по мере необходимости в переменных определённого типа.

 



Поделиться:


Последнее изменение этой страницы: 2016-12-16; просмотров: 776; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.21.100.34 (0.025 с.)