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

Логические величины




Лабораторная работа №1

Тема: Стандартные типы данных, Выражения и операции и операнды.

Цель: Изучить базовые понятия, типы и описания. Выражения, операции и операнды.

Результат обучения:

После успешного завершения занятия Студент должен уметь:

1. Составлять и выполнять программы на языке Visual С++.;

2. Уметь различать унарные (типы операций: унарные, бинарные и тернарные) операции.

План занятия:

I. Базовые понятия.

II. Типы и описания

III. Выражения, операции и операнды

IV. Самостоятельная работа.

 

I БАЗОВЫЕ ПОНЯТИЯ.

Базой для составления любых текстов являются символы, разрешенные для использования в данном языке. Для удобства описания множество символов, используемых в языке С++, можно разделить на группы, которые определены ниже.

 

1. Символы, используемые для образования ключевых слов и идентификаторов.

 

Прописные буквы латинского алфавита A B C D E F …….X Y Z
Строчные буквы латинского алфавита a b c d e f ….. x y z
Символ подчеркивания -

 

  1. Группа прописных и строчных букв русского алфавита и арабские цифры.
Прописные буквы русского алфавита А Б В Г Д …… Э Ю Я
Строчные буквы русского алфавита а б в г д …… э ю я
Символ подчеркивания 0 1 2 3 4 5 6 7 8 9

 

  1. Знаки нумерации и специальные символы.

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

 

 

Символ Наименование Символ Наименование
, Запятая ) Круглая скобка правая
. Точка ( Круглая скобка левая
; Точка с запятой } Фигурная скобка правая
: Двоеточие { Фигурная скобка левая
? Вопросительный знак < Меньше
Апостроф > Больше
! Восклицательный знак [ Квадратная скобка правая
| Вертикальная черта ] Квадратная скобка левая
/ Дробная черта # Номер
\ Обратная черта % Процент
~ Тильда & Амперсанд
* Звездочка ^ Логический не
+ Полюс = Равно
- Минус » Кавычки

Кроме выделенных групп символов, в языке Си могут использоваться так называемые управляющие последовательности, т.е. специальные символьные комбинации, используемые в функциях ввода и вывода информации. Управляющая последовательность строится на основе применения обратной черты (\) (обязательный первый символ) и комбинацией латинских букв и цифр.

 

Управляющая последовательность Наименование Шеснадцатеричная замена
\a Звонок  
\b Возврат на шаг  
\t Горизонтальная черта  
\n Переход на новую строку 00A
\v Вертикальная черта 00B
\r Возврат каретки 00C
\f Перевод формата 00D
Кавычки  
\' Апостроф  
\0 Ноль - символов  
\\ Обратная дробная черта 05C
\ddd Символ набора кодов в восьмеричном представлении  
\xddd Символ набора кодов в шестнадцатеричном представлении  

 

Для символического обозначения величин, имен функций и т.п. используются имена или идентификаторы. Идентификаторы в языке Си++ – это последовательность знаков, начинающаяся с буквы. В идентификаторах можно использовать заглавные и строчные латинские буквы, цифры и знак подчеркивания. Длина идентификаторов произвольная. Примеры правильных идентификаторов: abc A12 NameOfPerson BITES_PER_WORD. Отметим, что abc и Abc – два разных идентификатора, т.е. заглавные и строчные буквы различаются. Примеры неправильных идентификаторов: 12X a-b. Ряд слов в языке Си++ имеет особое значение и не может использоваться в качестве идентификаторов. Такие зарезервированные слова называются ключевыми.

Ключевые слова – это зарезервированные идентификаторы, которые наделены определенным смыслом. Их можно использовать только в соответствии со значением, известным компилятору языка С. Список основных ключевых слов. Язык С++ очень чувствителен в регистру букв. Ключевые слова - это предопределенные идентификаторы, кото­рые имеют специальное значение для компилятора Си. Их можно ис­пользовать только так как они определены. Имена объектов програм­мы не могут совпадать с названиями ключевых слов.

Список ключевых слов: asm auto bad_cast bad_typeid bool break case catch char class const const_cast continue default delete do double dynamic_cast else enum extern float for friend goto if inline int long namespace new operator private protected public register reinterpret_cast return short signed sizeof static static_cast struct switch template then this throw try type_info typedef typeid union unsigned using typeid union unsigned using virtual void volatile while xalloc. Ключевые слова не могут быть переопределены. Тем не менее, они могут быть названы другим текстом, но тогда перед компиляцией они должны быть заменены посредством препроцессора на соответст­вующие ключевые слова.

II ТИПЫ И ОПИСАНИЯ

Каждое имя и каждое выражение в программе имеет тип, определяющий операции, которые могут над ними производиться. Например, описание int X; определяет, что X имеет тип INT, т.е. является целой переменной.

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

[Спецификатор – класса - памяти] спецификатор – типа описатель [=инициатор]

Описатель – идентификатор простой переменной либо более сложная конструкция с квадратными скобками, круглыми скобками или звездочкой. Спецификатор типа – одно или несколько ключевых слов, определяющих тип объявляемой переменной. Инициатор задает начальное значение или список начальных значений, которые присваивается переменой при объявлении. Спецификатор класса памяти определяется одним из четырех ключевых слов: auto, extern, register, static и указывает, каким образом будет распределяться память под объявляемую переменную, с одной стороны, а с другой стороны- область видимости этой переменной, т.е из каких частей программы можно к ней обратиться.

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

В таблице перечислены простейшие типы данных, которые определяет язык Си++, и приведены наиболее типичные диапазоны их значений.

Встроенные типы языка Си++
Название Обозначание Диапазон значений
Байт char от -128 до +127
Байт баз знака unsigned char от 0 до 255
Короткое целое число short от -32768 до +32767
Короткое целое число без знака unsigned short от 0 до 65535
Целое число int от – 2147483648 до + 2147483647
Целое число без знака unsigned int (или просто unsigned) от 0 до 4294967295
Длинное целое число long от – 2147483648 до + 2147483647
Длинное целое число без знака unsigned long от 0 до 4294967295
Вещественное число одинарной точности float от ±3.4e-38 до ±3.4e+38 (7 значащих цифр)
Вещественное число двойной точности double от ±1.7e-308 до ±1.7e+308 (15 значащих цифр)
Вещественное число увеличенной точности long double от ±1.2e-4932 до ±1.2e+4932
Логическое значение bool значения true (истина) или false (ложь)

Целые числа

Для представления целых чисел в языке Си++ существует несколько типов – char, short, int и long (полное название типов: short int, long int, unsigned long int и т.д.. Поскольку описатель int можно опустить, мы используем сокращенные названия). Они отличаются друг от друга диапазоном возможных значений. Каждый из этих типов может быть знаковым или беззнаковым. По умолчанию, тип целых величин – знаковый. Если перед определением типа стоит ключевое слово unsigned, то тип целого числа — беззнаковый. Для того чтобы определить переменную x типа короткого целого числа, нужно записать:

short x;

Число без знака принимает только положительные значения и значение ноль. Число со знаком принимает положительные значения, отрицательные значения и значение ноль.

Целое число может быть непосредственно записано в программе в виде константы. Запись чисел соответствует общепринятой нотации. Примеры целых констант: 0, 125, -37. По умолчанию целые константы принадлежат к типу int. Если необходимо указать, что целое число — это константа типа long, можно добавить символ L или l после числа.

Если константа беззнаковая, т.е. относится к типу unsigned long, unsigned short или unsigned int, после числа записывается символ U или u. Например: 34U, 700034L, 7654ul.

Кроме стандартной десятичной записи, числа можно записывать в восьмеричной или шестнадцатеричной системе счисления. Признаком восьмеричной системы счисления является цифра 0 в начале числа. Признаком шестнадцатеричной — 0x или 0X перед числом. Для шестнадцатеричных цифр используются латинские буквы от A до F (неважно, большие или маленькие).

Таким образом, фрагмент программы

const int x = 240;
const int y = 0360;
const int z = 0xF0;

определяет три целые константы x, y и z с одинаковыми значениями.

Отрицательные числа предваряются знаком минус "-". Приведем еще несколько примеров:

// ошибка в записи восьмеричного числа
const usigned long ll = 0678;
// правильная запись
const short a = 0xa4;
// ошибка в записи десятичного числа
const int x = 23F3;

Для целых чисел определены стандартные арифметические операции сложения (+), вычитания (-), умножения (*), деления (/); нахождение остатка от деления (%), изменение знака (-). Результатом этих операций также является целое число. При делении остаток отбрасывается. Примеры выражений с целыми величинами:

x + 4; 30 -- x; x * 2; -x; 10 / x; x % 3;

Кроме стандартных арифметических операций, для целых чисел определен набор битовых (или поразрядных) операций. В них целое число рассматривается как строка битов (нулей и единиц при записи числа в двоичной системе счисления или разрядов машинного представления).

К этим операциям относятся поразрядные операции И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, поразрядное отрицание и сдвиги. Поразрядная операция ИЛИ, обозначаемая знаком |, выполняет операцию ИЛИ над каждым индивидуальным битом двух своих операндов. Например, 1 | 2 в результате дают 3, поскольку в двоичном виде 1 это 01, 2 – это 10, соответственно, операция ИЛИ дает 11 или 3 в десятичной системе (нули слева мы опустили).

Аналогично выполняются поразрядные операции И, ИСКЛЮЧАЮЩЕЕ ИЛИ и отрицание.

3 | 1 4 & 7 4 ^ 7 0 & 0xF ~0x00F0 результат результат результат результат результат 3 4 3 0 0xFF0F

 

Последний вопрос, который мы рассмотрим в отношении целых чисел, – это преобразование типов. В языке Си++ допустимо смешивать в выражении различные целые типы. Например, вполне допустимо записать x + y, где x типа short, а y – типа long.

При выполнении операции сложения величина переменной x преобразуется к типу long. Такое преобразование можно произвести всегда, и оно безопасно, т.е. мы не теряем никаких значащих цифр. Общее правило преобразования целых типов состоит в том, что более короткий тип при вычислениях преобразуется в более длинный. Только при выполнении присваивания длинный тип может преобразовываться в более короткий. Например:

short x;
long y = 15;
...
x = y;
// преобразование длинного типа
// в более короткий

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

Вещественные числа в Си++ могут быть одного из трех типов: с одинарной точностью — float, с двойной точностью – double, и с расширенной точностью – long double.

float x;
double e = 2.9;
long double s;

В большинстве реализаций языка представление и диапазоны значений соответствуют стандарту IEEE (Institute of Electrical and Electronics Engineers) для представления вещественных чисел. Точность представления чисел составляет 7 десятичных значащих цифр для типа float, 15 значащих цифр для double и 19 — для типа long double.

Вещественные числа записываются либо в виде десятичных дробей, например 1.3, 3.1415, 0.0005, либо в виде мантиссы и экспоненты: 1.2E0, 0.12e1. Отметим, что обе предыдущие записи изображают одно и то же число 0,12.

По умолчанию вещественная константа принадлежит к типу double. Чтобы обозначить, что константа на самом деле float, нужно добавить символ f или F после числа: 2.7f. Символ l или L означает, что записанное число относится к типу long double.

const float pi_f = 3.14f; const double pi_d = 3.1415; const long double pi_l = 3.1415L;

Для вещественных чисел определены все стандартные арифметические операции сложения (+), вычитания (-), умножения (*), деления (/) и изменения знака (-). В отличие от целых чисел, операция взятия по модулю не определена. Аналогично, все битовые операции и сдвиги к вещественным числам неприменимы; они работают только с целыми числами. Примеры операций:

2 * pi;
(x – e) / 4.0

Вещественные числа можно сравнивать на равенство (==), неравенство (!=), больше (>), меньше (<), больше или равно (>=) и меньше или равно (<=). В результате операции сравнения получается логическое значение истина или ложь.

Если арифметическая операция применяется к двум вещественным числам разных типов, то менее точное число преобразуется в более точное, т.е. float преобразуется в double и double преобразуется в long double. Очевидно, что такое преобразование всегда можно выполнить без потери точности.

Если вторым операндом в операции с вещественным числом является целое число, то целое число преобразуется в вещественное представление.

Хотя любую целую величину можно представить в виде вещественного числа, при таком преобразовании возможна потеря точности (для больших чисел).

Логические величины

В языке Си++ существует специальный тип для представления логических значений bool. Для величин этого типа существует только два возможных значения: true (истина) и false (ложь). Объявление логической переменной выглядит следующим образом:

bool condition;

Соответственно, существуют только две логические константы – истина и ложь. Они обозначаются, соответственно, true и false.

Для типа bool определены стандартные логические операции: логическое И (&&), ИЛИ (||) и НЕ (!).

// истинно, если обе переменные, cond1 и cond2, истинны
cond1 && cond2
// истинно, если хотя бы одна из переменных истинна
cond1 || cond2
// результат противоположен значению cond1
!cond

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

Итак, для записи знаков в языке Си++ служат типы char и unsigned char. Первый – это целое число со знаком, хранящееся в одном байте, второй – беззнаковое байтовое число. Эти типы чаще всего используются для манипулирования символами, поскольку коды символов как раз помещаются в байт.

Пояснение. Единственное, что может хранить компьютер, это числа. Поэтому для того чтобы можно было хранить символы и манипулировать ими, символам присвоены коды – целые числа. Существует несколько стандартов, определяющих, какие коды каким символам соответствуют. Для английского алфавита и знаков препинания используется стандарт ASCII. Этот стандарт определяет коды от 0 до 127. Для представления русских букв используется стандарт КОИ-8 или CP-1251. В этих стандартах русские буквы кодируются числами от 128 до 255. Таким образом, все символы могут быть представлены в одном байте (максимальное число символов в одном байте – 255). Для работы с китайским, японским, корейским и рядом других алфавитов одного байта недостаточно, и используется кодировка с помощью двух байтов и, соответственно, тип wchar_t (подробнее см. ниже).

Чтобы объявить переменную байтового типа, нужно записать:

char c; unsigned char u; // байтовое число со знаком // байтовое число без знака

Поскольку байты – это целые числа, то все операции с целыми числами применимы и к байтам. Стандартная запись целочисленных констант тоже применима к байтам, т.е. можно записать: c = 45;

где c — байтовая переменная. Однако для байтов существует и другая запись констант. Знак алфавита (буква, цифра, знак препинания), заключенный в апострофы, представляет собой байтовую константу, например: 'S' '&' '8' 'ф'

Числовым значением такой константы является код данного символа, принятый в Вашей операционной системе.

В кодировке ASCII два следующих оператора эквивалентны: char c = 68; char c = 'D';

Первый из них присваивает байтовой переменной c значение числа 68. Второй присваивает этой переменной код латинской буквы D, который в кодировке ASCII равен 68.

Для обозначения ряда непечатных символов используются так называемые экранированные последовательности – знак обратной дробной черты, после которого стоит буква. Эти последовательности стандартны и заранее предопределены в языке:

\a звонок.

Поделиться:





Читайте также:





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



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