Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Типы данных. Преобразование типов.




Структура программы

Программа на языке С++ состоит из директив препроцессора, указаний компилятору, объявлений переменных и/или констант, объявлений и определений функций.

Подключение библиотек(стандартных);

Включение стандартных библиотек производиться с помощью директивы #include, которая имеет следующий синтаксис:
#include <путь>

#include "путь"

Угловые скобки здесь являются элементом синтаксиса.

Директива #include включает содержимое файла, путь к которому задан, в компилируемый файл вместо строки с директивой. Если путь заключен в угловые скобки, то поиск файла осуществляется в стандартных директориях. Если путь заключен в кавычки и задан полностью, то поиск файла осуществляется в заданной директории, а если путь полностью не задан – в текущей директории. С помощью это директивы Вы можете включать в текст программы как стандартные, так и свои файлы.

Во включаемый файл можно поместить, например, общие для нескольких исходных файлов определения именованных констант и макроопределения. Включаемые файлы используются также для хранения объявлений внешних переменных и абстрактных типов данных, разделяемых несколькими исходными файлами. Более подробную информацию об использовании заголовочных файлов.

Кроме того, как было указано выше, в языке С++ ряд функций, такие как функции ввода/вывода, динамического распределения памяти и т.д., не являются элементом языка, а входят в стандартные библиотеки. Для того чтобы пользоваться функциями стандартных библиотек, необходимо в текст программы включать так называемые заголовочные файлы (в описании каждой функции указывается, какой заголовочный файл необходим для неё). Это также делается с помощью директивы препроцессора #include.

Директива #include может быть вложенной. Это значит, что она может встретиться в файле, включенном другой директивой #include. Допустимый уровень вложенности директив #include зависит от реализации компилятора.

Обычно используются <iostream> <math.h> <define> и так далее в зависимости от функционала вашей программы.

Рабочее пространство(пространство имён)-принято использовать STD

Синтаксис:

using namespace std;

 

Переменные и константы:

Объявление переменной

Объявление переменной задает имя и атрибуты переменной. Атрибутами переменной могут быть тип, количество элементов (для массивов), спецификация класса памяти, а также инициализатор. Инициализатор – это константа соответствующего типа, задающая значение, которое присваивается переменной при создании.

Объявление переменной имеет следующий синтаксис:
[ <спецификация класса памяти> ] <тип> <имя> [= <инициализатор> ] [, <имя> [= <инициализатор> ] ... ];

Примеры объявления переменных

int x; // Объявление переменной целого типа без инициализатора
double y = exp(1); // Переменная вещественного типа инициализируется числом e. // exp(x) – функция, вычисляющая ex.
int a, b = 0; // Объявление двух переменных целого типа. Переменная b инициализируется значением 0.

В языке С++ нет ограничений на количество символов в имени. Однако некоторые части реализации (в частности, компоновщик) недоступны автору компилятора, и они иногда накладывают такие ограничения.

Константы (константные переменные)

В языке С++ введена концепция определяемых пользователем констант для указания на то, что значение нельзя изменить непосредственно. Это может быть полезно в нескольких отношениях. Например, многие объекты не меняются после инициализации; использование символических констант приводит к более удобному в сопровождении коду, чем применение литералов непосредственно в тексте программы; указатели часто используются только для чтения, но не для записи; большинство параметров функций читаются, но не перезаписываются.

Чтобы объявить объект константой, в объявление нужно добавить ключевое слово const. Так как константе нельзя присваивать значения, она должна быть инициализирована.

const int a = 100; const int b[] = {1, 2, 3, 4, 5}; const int c; // a является константой // Все b[i] являются константами // Ошибка – нет инициализатора!

Типичным является использование констант в качестве размера массивов и меток в инструкции case.

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

Объявление типа typedef

Объявление, начинающееся с ключевого слова typedef, вводит новое имя для типа, не для переменной данного типа. Целью такого объявления часто является назначение короткого синонима для часто используемого типа. Например, при частом применении unsigned char можно ввести синоним uchar.

typedef unsigned char uchar; // Теперь uchar – синоним для unsigned char

Имена, вводимые с помощью typedef, являются синонимами, а не новыми типами. Следовательно, старые типы можно использовать совместно с их синонимами. Если вам нужны различные типы с одинаковой семантикой или с одинаковым представлением, обратитесь к перечислениям или классам.

Типы данных. Преобразование типов.

Типы данных в С++ таковы:

Bool- логический тип. Имеет значение true или false(истина или ложь) истина-1, ложь-0.

 

1.int (целый); Размер типа int не определяется стандартом, а зависит от компьютера и компилятора. Для 16-разрядного процессора под величины этого типа отводится 2 байта, для 32-разрядного — 4 байта.

Спецификатор short перед именем типа указывает компилятору, что под число требуется отвести 2 байта независимо от разрядности процессора. Спецификатор long означает, что целая величина будет занимать 4 байта. Таким образом, на 16-разрядном компьютере эквиваленты int и short int, а на 32-разрядном — int и long int.

2.char (символьный); Под величину символьного типа отводится количество байт, достаточное для размещения любого символа из набора символов для данного компьютера, что и обусловило название типа. Как правило, это 1 байт. Тип char, как и другие целые типы, может быть со знаком или без знака. В величинах со знаком можно хранить значения в диапазоне от -128 до 127. При использовании спецификатора unsigned значения могут находиться в пределах от О до 255. Этого достаточно для хранения любого символа из 256-символьного набора ASCII. Величины типа char применяются также для хранения целых чисел, не превышающих границы указанных диапазонов.

Стандарт C++ определяет три типа данных для хранения вещественных значений: float, double и long double.

Типы данных с плавающей точкой хранятся в памяти компьютера иначе, чем целочисленные. Внутреннее представление вещественного числа состоит из двух частей — мантиссы и порядка. величины типа float занимают 4 байта, из которых один двоичный разряд отводится под знак мантиссы, 8 разрядов под порядок и 23 под мантиссу. Мантисса — это число, большее 1.0, но меньшее 2.0. Поскольку старшая цифра мантиссы всегда равна 1, она не хранится.

Для величин типа double, занимающих 8 байт, под порядок и мантиссу отводится 11 и 52 разряда соответственно. Длина мантиссы определяет точность числа, а длина порядка — его диапазон. Как можно видеть из таблицы в конце записи, при одинаковом количестве байт, отводимом под величины типа float и long int, диапазоны их допустимых значений сильно различаются из-за внутренней формы представления.

Спецификатор long перед именем типа double указывает, что под его величину отводится 10 байт.

Константы с плавающей точкой имеют по умолчанию тип double. Можно явно указать тип константы с помощью суффиксов F, f (float) и L, l (long). Например, константа 2E+6L будет иметь тип long double, а константа 1.82f — тип float.

 

1. wchar_t (расширенный символьный); Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например, Unicode. Размер этого типа зависит от реализации; как правило, он соответствует типу short. Строковые константы типа wchar_t записываются с префиксом L, например, L»Gates».

2. float (вещественный);

3. double (вещественный с двойной точностью).

Спецификаторы типа:

  • short (короткий);
  • long (длинный);
  • signed (знаковый);
  • unsigned (беззнаковый).

Тип -> Диапазон значений-> Размер (байт)

bool true и false 1

signed char -128 … 127 1

unsigned char 0 … 255 1

signed short int -32 768 … 32 767 2

unsigned short int 0 … 65 535 2

signed long int -2 147 483 648 … 2 147 483 647 4

unsigned long int 0 … 4 294 967 295 4

float 3.4e-38 … 3.4e+38 4

double 1.7e-308 … 1.7C+308 8

long double 3.4e-4932 … 3.4e+4932 10

Любые операнды типа char, unsigned char или short преобразуются к типу int по правилам:

  • char расширяется нулем или знаком в зависимости от умолчания для char;
  • unsigned char расширяется нулем;
  • signed char расширяется знаком;
  • short, unsigned short и enum при преобразовании не изменяются.
  • Затем любые два операнда становятся либо int, либо float, double или long double.

Преобразование других типов данных осуществляется следующим образом:

1. Если один из операндов имеет тип long double, то другой преобразуется к типу long double.

2. Если один из операндов имеет тип double, то другой преобразуется к типу double.

3. Если один из операндов имеет тип float, то другой преобразуется к типу float.

4. Иначе, если один из операндов имеет тип unsigned long, то другой преобразуется к типу unsigned long.

5. Иначе, если один из операндов имеет тип long, то другой преобразуется к типу long.

6. Иначе, если один из операндов имеет тип unsigned, то другой преобразуется к типу unsigned.

7. Иначе оба операнда должны иметь тип int.

Тип результата тот же, что и тип участвующих в выражении операндов.

 

Тип void

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

Преобразование типов:

Неявное преобразование типов(выполняется самим компилятором)

Явное выполняется вручную программистом.

Неявное:

Для наглядного примера представлю таблицу с преобразованиями типов данных. В таблице рассмотрим операцию деления. В качестве целочисленного типа данных возьмем int, ну и вещественный тип данных у нас будет float.

Таблица 1 - Явное и неявное преобразование типов данных в С++
x y Результат деления Пример
делимое делитель частное x = 15 y = 2
int int int 15/2=7
int float float 15/2=7.5
float int float 15/2=7.5

Из таблицы видно, что меняя переменные различных типов данных местами, результат остается тот же (в нашем случае это делимое и делитель). О неявном преобразовании типов данных все.

 

Явное:

Для явного преобразования типов в С++ предусмотрена очень удобная штука:

float(15) / 2 // результат равен 7.5, число 15 преобразуется в вещественный тип данных float.

double(15) / 2 // результат равен 7.5 – тоже самое!!!

 

Как бы не поставили это выражение, результат будет одинаковым.

 

Второй способ (на мой взгляд более удобный):

Использовать данную нам «от природы» возможность С++: static_cast.

 

static_cast</*тип данных*/>(/*переменная или число*/)

 

пример: static_cast<float>( 15 ) /2 результат равен 7.5

Пример с переменной:

  int ret=15; static_cast<float>(ret)/2 //результат равен 7.5

В случае с переменной надо понимать, что в строке 2 переменная ret не преобразуется в тип данных float, а всего лишь на всего создается временная копия переменной ret с типом данных float.

3)Операции отношения. Логические операции. Приоритет операций в С++.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...