Типы данных, операции, выражения.ppt
- Количество слайдов: 50
Типы данных в С++ Лекция 2
Определение типа данных p Типом данных называется понятие языка программирования, включающее: n n n p внутреннее представление данных в памяти компьютера; определение множества возможных значений данных этого типа (его области определения); определение множества возможных операций над данными этого типа Типы данных языка C++ делят на скалярные и составные (агрегатные) 2/17/2018 Типы данных в C++ 2
Значения переменных Переменной скалярного типа в каждый момент времени соответствует одно единственное значение p Переменной составного типа в каждый момент времени соответствует некоторое множество значений p 2/17/2018 Типы данных в C++ 3
Скалярные типы данных называют также арифметическими, т. к. данные этих типов можно использовать в арифметических выражениях p Скалярные типы данных делятся на целые и вещественные p Большинство скалярных типов являются стандартными, т. е. они присутствуют во всех реализациях языка p 2/17/2018 Типы данных в C++ 4
Стандартные типы данных p Для задания целых типов используются ключевые слова: n n p int – целый тип char – символьный тип wchar_t – расширенный символьный тип bool – логический тип Для задания вещественных типов используются ключевые слова: n n 2/17/2018 float – одинарная точность double – двойная точность Типы данных в C++ 5
Спецификаторы типов p При задании типов данных можно использовать спецификаторы типов: n n p short – короткий long – длинный signed – знаковый unsigned – беззнаковый Спецификаторы уточняют внутреннее представление и диапазон значений стандартных типов 2/17/2018 Типы данных в C++ 6
Размеры типов данных Количество байт памяти, отводимых для представления данных того или иного типа, зависит от реализации p Это определяет и диапазон значений, представимых этим типом данных p Для реализации с 32 -разрядной арифметикой размеры целых типов данных и диапазоны представимых значений приведены в таблице на следующем слайде p 2/17/2018 Типы данных в C++ 7
Целые типы данных Тип bool signed char unsigned char 0, 1 -128 … 127 0 … 255 Длина 1 байт signed wchar_t unsigned wchar_t signed short int unsigned short int signed long int unsigned long int – 32768. . . 32767 0 … 65535 – 2147483648. . 2147483647 0 … 4294967295 2 байта 4 байта 2/17/2018 Диапазон Типы данных в C++ 8
Целые типы данных При задании типов можно использовать отдельные слова: int, char, short, long, unsigned p Это эквивалентно: long signed int, signed char, signed short int, signed long int, unsigned int, соответственно p 2/17/2018 Типы данных в C++ 9
Представление целых чисел p p В памяти компьютера целые числа представляются в двоичной системе счисления Для знаковых типов (int, signed short int и signed long int) старший разряд является знаковым n n s=0 для положительных чисел s=1 для отрицательных чисел s 2/17/2018 d Типы данных в C++ 10
Представление целых чисел Положительное и отрицательное числа, равные по модулю, представляются в памяти компьютера взаимно дополнительными кодами p Например значение переменной типа char, равное 25 представляется кодом 00011001, а значение -25 представляется кодом 11100111 p 2/17/2018 Типы данных в C++ 11
Вещественные типы данных Математическое множество вещественных чисел бесконечно и непрерывно p В силу ограниченности объема памяти, отводимой для хранения одного числа, в памяти компьютера может быть представлено лишь ограниченное дискретное подмножество вещественных чисел p 2/17/2018 Типы данных в C++ 12
Способы представления p Используются два способа представления вещественных чисел: n в форме с фиксированной точкой (Fixed point format) n в форме с плавающей точкой (Floating point format) 2/17/2018 Типы данных в C++ 13
Форма с фиксированной точкой p Число представлено в виде s*c. d где s – знаковый множитель (+1 или -1), c – последовательность цифр целой части числа, d – последовательность цифр дробной части числа p Двоичный код, представляющий вещественное число в этой форме, имеет следующую структуру s 2/17/2018 c Типы данных в C++ d 14
Форма с плавающей точкой p Число представлено в виде s*m*2 (p-p 0) где s – знаковый множитель (+1 или -1), p – целое, являющееся порядком числа, p 0 – константа, m – мантисса числа, подчиняющаяся условию нормализации 0. 5<= m <1 p Представляющий число двоичный код имеет следующую структуру s 2/17/2018 p m Типы данных в C++ 15
Вещественные типы данных Тип float double Диапазон 3, 4 E– 38. . . 1, 7 E+38 1, 7 E– 308 … 1, 7 E+308 long double 3, 4 E– 4932 … 3, 4 E+4932 2/17/2018 Типы данных в C++ Значащих Размер цифр (байт) 15– 16 4 8 19– 20 12 16
Структура кодов p Размеры полей n n n p p s - 1 бит p – 8 бит для float, 11 бит для double, 17 бит для long double m – 23 бит для float, 52 бит для double, 78 бит для long double Таким образом, типы float, double и long double представляют вещественные данные в форме с плавающей точкой Примеры внутреннего представления 2/17/2018 Типы данных в C++ 17
Тип char Для хранения данных типа char отводится 1 байт памяти, что достаточно для представления всех символов таблицы ASCII p Литералы этого типа записываются в виде одиночных символов либо восьмеричных (шестнадцатеричных) кодов символов с предшествующим символом «обратный слэш» , заключенных в апострофы: ‘A’, ‘#’, ‘102’, ‘x 31’ p 2/17/2018 Типы данных в C++ 18
Операции Операцией называется действие над значениями, в результате которого получается новое значение p Операции обозначаются ключевыми словами, а также одиночными или двойными специальными символами p Значения, над которыми выполняется операция, называются операндами p 2/17/2018 Типы данных в C++ 19
Характеристики операций Число операндов, участвующих в операции, называется ее арностью p В зависимости от числа операндов операции делятся на: p n n n p унарные, бинарные, тернарные Кроме арности операции различаются уровнем приоритета 2/17/2018 Типы данных в C++ 20
Характеристики операций Наконец еще одной характеристикой операций в C++ является направление ассоциативности, которая определяет последовательность выполнения операций одного уровня приоритета при вычислении значения выражений p Операция называется лево-ассоциативной, если несколько подряд записанных таких операций выполняются в порядке слева направо, и правоассоциативной, если выполнение происходит в порядке справа налево p 2/17/2018 Типы данных в C++ 21
Операции наивысшего приоритета p Наивысшим 0 -м уровнем приоритета обладают следующие операции: ( ) – вызов функций [ ] – индексирование элементов массива -> – косвенный выбор компонента (через указатель на объект). – прямой выбор компонента (через имя объекта) p Все эти операции являются правоассоциативными 2/17/2018 Типы данных в C++ 22
Унарные операции p Требуют для своего выполнения одного операнда. К числу этих операций относятся: ++ – инкремент -– декремент sizeof – размер в байтах ~ – поразрядное отрицание ! – логическое отрицание – арифметическое отрицание (унарный минус) + – унарный плюс & – извлечение адреса * – разыменование 2/17/2018 Типы данных в C++ 23
Унарные операции Операция инкремента (декремента) увеличивает (уменьшает) исходное значение операнда на 1 и возвращает измененное значение p Таким образом, оператор i = ++j эквивалентен паре операторов: p j = j + 1; i = j; p Перечисленные унарные операции имеют 1 -й уровень приоритета и являются правоассоциативными 2/17/2018 Типы данных в C++ 24
Операция приведения типа p Еще одна унарная операция, имеющая однако более низкий 2 -й уровень приоритета (имя_типа) операнд Преобразует значение операнда к указанному типу; операция является право-ассоциативной p Например: p (double) 17/5 p В результате вычисления этого выражения будет получено значение 3. 4 2/17/2018 Типы данных в C++ 25
Бинарные мультипликативные операции Бинарные операции требуют для своего выполнения двух значений p Мультипликативные операции: p * / % p - умножение - деление - остаток от деления Имеют 3 -й уровень приоритета и являются левоассоциативными 2/17/2018 Типы данных в C++ 26
Бинарные аддитивные операции p К этой группе операций относятся: + - p - сложение - вычитание Имеют 4 -й уровень приоритета и являются левоассоцитивными 2/17/2018 Типы данных в C++ 27
Бинарные операции сдвига Применяются к операндам целых типов и производят сдвиг кода левого операнда на число бит, равное значению правого операнда p Биты, выходящие за разрядную сетку теряются, а освобождающиеся разряды заполняются нулями p Направление сдвига: p << – сдвиг влево >> – сдвиг вправо p Операции лево-ассоциативные с 5 -м уровнем приоритета 2/17/2018 Типы данных в C++ 28
Бинарные операции отношения p К этой группе операций относятся: < <= >= > p - меньше или равно - больше Операции лево-ассоциативные с 6 -м уровнем приоритета 2/17/2018 Типы данных в C++ 29
Проверка на равенство == != p Операции имеют 7 -й уровень приоритета и являются лево-ассоциативными 2/17/2018 Типы данных в C++ 30
Побитовые операции Логические операции, выполняемые над соответствующими битами операндов целого типа; являются лево-ассоциативными p К их числу относятся следующие операции: p & – поразрядная конъюнкция (8 -й уровень приоритета) ^ – поразрядная исключающая дизъюнкция (9 -й уровень приоритета) | – поразрядная дизъюнкция (10 -й уровень приоритета) 2/17/2018 Типы данных в C++ 31
Бинарные логические операции p К этой группе операций относятся: && || – конъюнкция – дизъюнкция Операнды могут иметь любой скалярный тип, который преобразуется к целому p Полученный после этого код считается соответствующим значению TRUE, если он отличен от нуля p Операции имеют 11 -й и 12 -й уровень приоритета, соответственно, и являются лево-ассоциативными p 2/17/2018 Типы данных в C++ 32
Условная операция p Право-ассоциативная операция с 13 -м уровнем приоритета: операнд_1 ? операнд_2 : операнд_3 p Вычисляется операнд_1; если его значение отлично от нуля, результатом будет значение операнда_2, иначе – значение операнда_3 2/17/2018 Типы данных в C++ 33
Операции присваивания p Имеют приоритет 14 и являются правоассоциативными: = , +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |= Для простого присваивания (=) результатом является значение правого операнда, которое присваивается левому операнду p Для составного присваивания предварительно выполняется соответствующая операция с участием левого и правого операндов p 2/17/2018 Типы данных в C++ 34
Операция запятая p Называется операцией запятая: операнд_1 , операнд_2 Вычисляется значение левого, затем – правого операндов p Тип и значение результата совпадают с типом и значением правого операнда p Имеет 15 -й (самый низкий) уровень приоритета и является лево-ассоциативной p 2/17/2018 Типы данных в C++ 35
Выражения Операции являются основными (базовыми) действиями над значениями p Более сложные действия над значениями могут быть представлены как последовательность операций. Одним из способов описания такой последовательности являются выражения p 2/17/2018 Типы данных в C++ 36
Выражения p Выражение – это запись, которая может содержать: n n n p литералы константы переменные вызовы функций операции круглые скобки Наличие в выражении хотя бы одного из первых четырех элементов обязательно 2/17/2018 Типы данных в C++ 37
Примеры выражений x+y*4 65 a && (b || c) (v<=w) && (x!=5) Z 2/17/2018 Типы данных в C++ 38
Выражения Литералы, константы, переменные и вызовы функций , входящие в состав выражения, называются операндами p Переменные, входящие в состав выражения, должны иметь определенные значения p Выражение, не содержащее переменных, называется константным p 2/17/2018 Типы данных в C++ 39
Вычисление выражения Выполнение операций, указанных в выражении, над входящими в него операндами называется вычислением выражения p Результатом вычисления выражения является получение нового значения, которое называется значением выражения, а тип этого значения называется типом выражения p 2/17/2018 Типы данных в C++ 40
Приоритет операций При вычислении выражения выполнение операций над операндами происходит в определенном порядке p Порядок выполнения операций определяется приоритетом соответствующей группы операций p 2/17/2018 Типы данных в C++ 41
Приоритет операций Приоритет операции Операция 0 Вызов функций, индексирование, выбор компонента 1 Унарные операции 2 Приведение типа 3 Бинарные мультипликативные операции 4 Бинарные аддитивные операции 5 Операции сдвига 6 Операции отношения 7 Проверка на равенство 8 -10 11 -12 Побитовые логические операции Логические операции 13 14 Присваивания 15 2/17/2018 Условная операция Операция запятая Типы данных в C++ 42
Порядок выполнения операций p Приоритетный порядок выполнения операций может быть изменен с помощью круглых скобок. Например: x+y*4 или (x + y) * 4 p Порядок выполнения операций с одинаковым приоритетом определяется с учетом направления ассоциативности операций 2/17/2018 Типы данных в C++ 43
Направление ассоциативности p Унарные операции, условная операция и операции присваивания право-ассоциативны, остальные лево-ассоциативны 2/17/2018 Типы данных в C++ 44
Операция инкремента p Операция инкремента ++ имеет две формы: n n префиксную (например, ++x) постфиксную (например, x++) Операция инкремента в префиксной форме выполняется обычным образом в соответствии с приоритетностью операций p Эта же операция в постфиксной форме выполняется после завершения процесса вычисления выражения p 2/17/2018 Типы данных в C++ 45
Пример x = ++y * 2 + x p При x = 2 и y = 3 значение выражения будет равно 10; значение переменной x после завершения вычисления выражения будет равно 10, а значение переменной y будет равно 4 x = y++ * 2 + x p При тех же значениях x и y значение выражения будет равно 8; значение переменной x после завершения вычисления выражения будет равно 8, а значение переменной y будет равно 4 2/17/2018 Типы данных в C++ 46
Функции Если правило получения нового значения не может быть представлено в виде выражения, то его оформляют в виде функции p Операнды функции называют ее параметрами p Для обращения к функции используется вызов функции. Вызов функции состоит из имени функции и заключенного в круглые скобки списка ее параметров p 2/17/2018 Типы данных в C++ 47
Стандартные функции Наиболее часто используемые функции включены в состав языка и называются стандартными функциями p Примеры стандартных функций: p abs(x) sqrt(x) log(x) sin(x) и т. д. p Для их использования в программе нужно подключить заголовочный файл math. h 2/17/2018 Типы данных в C++ 48
Выражения с вызовами функций p Параметрами функции в общем случае являются выражения. Например: sqrt(x + y) sin(fi/3 + psi) p Если вызовы функций входят в выражение, то они вычисляются до выполнения всех других операций в этом выражении 2/17/2018 Типы данных в C++ 49
Конец лекции 2/17/2018 Типы данных в C++ 50