Отчёт по лабе. Тема 2 Типы данных. Тема Встроенные типы данных Понятие переменной
Скачать 272.93 Kb.
|
Тема 2. Встроенные типы данныхПонятие переменнойПеред использованием в программе любая переменная должна быть объявлена Тип_данных имя_переменной[, имя_переменной, … ]; При определении переменных можно одновременно провести их инициализацию имя_переменной = значение При записи в переменную нового значения старое стирается Значение Имя Тип данных Переменная – это ячейка в памяти компьютера, которая имеет имя (идентификатор) и хранит некоторое значение определенного типа. Адрес памяти Переменная Объем памяти Идентификаторы (имена)Имена, использующиеся для переменных, функций, меток и других определяемых пользователем объектов, называются идентификаторами. В идентификаторе могут использоваться буквы латинского алфавита, цифры и знак подчеркивания "_", но он не может начинаться с цифры. Прописные и строчные буквы различаются. Идентификаторы не должны совпадать с ключевыми словами языка программирования. Примеры идентификаторов _code TEXT Text icon16_16 iCountPersonOfBase screen_width Правильные и неправильные идентификаторыName правильно Имя неправильно 12Z неправильно _12Z правильно dValue правильно B34_X правильно VAL_ПЕРЕМ неправильно __M2__ правильно double неправильно abc&def неправильно Классификация типов данных СТипы данных Встроенные Составные Целочисленные Вещественные Массивы Объединения Структуры Логический Символьные Перечисления Логический тип данныхТип данных bool (включен в С только начиная с С99) Переменным типа bool могут быть присвоены только значения false или true, которые являются зарезервированными словами. Если переменной логического типа присвоено целое значение, то 0 интерпретируется как false, а значение, не равное нулю, как true. В памяти bool занимает 1 байт. Пример кода bool var1; //объявление переменной var1 = false; //присвоение значения //объявление и присвоение bool var2 = true; //инициализация bool var3(true); //инициализация var1 = var2; //присвоение значения Целочисленные типы данныхТип данных char Переменным типа char могут быть присвоены целые значения. В памяти char занимает гарантированно 1 байт. Модификаторы Тип данных int Переменным типа int могут быть присвоены целые значения. Размер занимаемой памяти зависит от платформы. unsigned signed long short signed означает целое число со знаком, unsigned - целое без знака. Для Win32/64 short задает размер 2 байта, int и long - 4 байта. Тип данных char1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 unsigned char char Знаковый разряд (0 = +, 1 = -) 11111111 = 255 11111110 = 254 ... 00000001 = 1 00000000 = 0 01111111 = 127 00000001 = 1 00000000 = 0 11111111 = -1 11111110 = -2 10000000 = -128 0 7 0 7 Тип данных short1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 unsigned short short Знаковый разряд (0 = +, 1 = -) 1111111111111111 = 65535 1111111111111110 = 65534 0000000000000010 = 2 0000000000000001 = 1 0000000000000000 = 0 0111111111111111 = 32767 0000000000000001 = 1 0000000000000000 = 0 1111111111111111 = -1 1000000000000000 = -32768 15 0 15 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 short unsigned short Тип данных long 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 long Знаковый разряд (0 = +, 1 = -) 01111111111111111111111111111111 = 2147483647 = 231-1 10000000000000000000000000000000 = -2147483648 = -231 15 16 31 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 11111111111111111111111111111111 = 4294967295 = 232-1 10000000000000000000000000000000 = 2147483648 = 231 unsigned long Сводная таблица целочисленных типов данныхТип Размер Диапазон bool 1 false, true signed char 1 -128 … 127 unsigned char 1 0 … 255 signed short int 2 -32768 … 32767 unsigned short int 2 0 … 65535 signed long int 4 -231 … 231-1 unsigned long int 4 0 … 232-1 short = short int long = long int signed - по умолчанию signed long long int 8 -263 … 263-1 unsigned long long int 8 0 … 264-1 unsigned = unsigned int Целочисленные константы Целочисленные константы могут записываться в десятичном, восьмеричном и шестнадцатеричном видах. Восьмеричные константы начинаются с префикса 0, шестнадцатеричные - с префиксов 0х или 0Х. Для записи unsigned, long или long long констант могут использоваться соответственно следующие суффиксы: u, U, l, L, ll, LL. Пример кода int a = 15; int b = 015; //b = 13 int c = 0x15; //c = 21 int d = 0X15; //d = 21 unsigned long long u = 900000000001ull; unsigned long long h = 0x8A40000000000010uLL; Вещественные типы данных Тип данных float Переменным типа float могут быть присвоены вещественные значения в формате с плавающей точкой. В памяти float занимает 4 байта. Тип данных double Переменным типа double могут быть присвоены вещественные значения в формате с плавающей точкой. В памяти double занимает 8 байтов. Тип данных long double Переменным типа long double могут быть присвоены вещественные значения в формате с плавающей точкой. В памяти long double занимает 10 байтов. Представление вещественных типов данных 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 float Знаковый разряд (0 = +, 1 = -) 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 15 31 16 порядок мантисса Число = (–1)знак*(1+мантисса)*2(порядок-127) мантисса 2-1 + 2-2 + 2-3 Ответ: 1,875 = (1+0,875)*2(127-127) Сводная таблица вещественных типов данных Тип float Размер Диапазон 4 3.4*10-38 … 3.4*1038 double 8 1.7*10-308 … 1.7*10308 long double 10 3.4*10-4932 … 3.4*104932 Точность 7 15 19 Точность чисел с плавающей точкой 123000 - 3 значащих цифры 0.045 - 2 значащих цифры 123000.045 - 9 значащих цифр Вещественные константы Вещественные константы включают десятичную точку либо могут использовать экспоненциальный формат (е или Е). Тип константы по умолчанию – double, с помощью модификаторов F или f можно задать константу типа float, а с помощью L или l – типа long double. Пример кода float a = 5.67F; float b = .25f; float c = 5.67e4F; float d = 2E-2F; double e = 5.67; double f = 25.; double g = 5.67e4; long double h = 2.1234E-2L; Символы. Кодирование символов Тип данных char Для представления символов используется тип данных char. В памяти char занимает 1 байт. ‘0’ = 48 ‘1’ = 49 … ‘A’ = 65 ‘B’ = 66 … ‘a’ = 97 ‘b’ = 98 … Код ASCII Расширенные кодировки символов Символьные константы Символьные константы состоят из одного символа, заключенного в апострофы. Тип константы – char. Для представления непечатаемых символов используются управляющие последовательности, начинающиеся с символа \ (обратный слэш). Пример кода char a = ’a’; //символ с кодом 97 char b = ’1’; //символ с кодом 49 char c = ’\t’; //табуляция (код 9) char d = ’\r’; //курсор в начало строки код 13) char e = ’\n’; //перевод строки (код 10) char f = ’\062’;//символ '2' с кодом 50 char g = ’\”’; //символ ” (код 34) char h = ’\’’; //символ ’ (код 39) char i = ’\\’; //символ \ (код 92) Строковые константы (литералы) Строковые константы состоят из нескольких символов, заключенных в апострофы. Тип строковой константы – char*. Для представления непечатаемых символов используется комбинация, начинающаяся с символа \ (обратный слэш). В конце каждого строкового литерала компилятор добавляет нуль-терминатор '\0‘. Поэтому длина строки всегда на 1 байт больше количества символов в ее записи. Пример кода char* a = ”abcdef”; char* b = ”a”; char* c = ””; // пустая строка char* d = ”Вывод на терминал\r\n”; char* e = ”Оценка \”отлично\””; Определение размера типов данных Пример кода int i = sizeof(char);//для типа данных int j = sizeof(i); //для переменных () не обязательны int k = sizeof j; С помощью унарного оператора sizeof можно определить занимаемый в памяти размер в байтах для переменных или для типов данных. Значение оператора sizeof вычисляется во время компиляции и считается константой. Если применяемые в программе алгоритмы ориентируются на размер типов данных, то в этом случае оператор sizeof помогает создавать переносимый код. Следует самостоятельно определить размер необходимого типа данных или переменной, а не использовать «стандартный». Область видимости переменных Каждая переменная имеет определенную область видимости, которая представляет участок программы, в рамках которого можно использовать данную переменную. Переменные бывают глобальными и локальными.
Внимание! По умолчанию локальные переменные инициализируются информационным мусором, а глобальные переменные нулем. Сокрытие переменных Пример кода // глобальная переменная (гп) double z; //по умолчанию в гп z значение 0.0 int main(){ // локальная переменная (лп) int z; //по умолчанию в лп z информационный мусор // лп z скрывает доступ к гп z z = 10; . . . { // новая лп на более глубоком уровне // вложенности скрывает доступ int z = 5; cout << z; //выведет 5 } } Преобразование типов Пример кода преобразования типов double d = 76.56; float i = d; //неявное преобразование float j = (float)d;//явное преобразование(стиль С) Конвертация значений из одного типа данных в другой называется преобразованием типов. Преобразование может быть явным или не явным. При неявном преобразовании компилятор автоматически конвертирует один фундаментальный тип данных в другой. При явном преобразовании программист использует один из операторов явного преобразования для выполнения конвертации объекта из одного типа данных в другой. Потеря точности и потеря значения Пример кода double d = -76.56; int i = d; //потеря точности unsigned u = d; //потеря значения float f = d; //потенциально опасное место d = 1234567.89123; f = d; //потеря точности Преобразование типов – потенциально опасная операция, так как может привести либо к потери точности (потеря значащих цифр), либо к потере значения (полная потеря результата). Трудность нахождения ошибок, вызванных потерей точности или значения, обуславливается тем, что негативные последствия зависят не только от программного кода, но и от значения преобразуемых переменных. Выбор типов данных Элемент данных char, short, int, long signed/unsigned Число Текст char, char* Целое Вещественное Диапазон, знак Точность float, double Логический bool |