
- •1.1. Элементы Языка си
- •1.1.1. Используемые символы
- •1.1.2. Константы
- •1.1.3. Идентификатор
- •1.1.4. Ключевые слова
- •1.1.5. Использование комментариев в тексте программы
- •1.2. Типы данных и их объявление
- •1.2.1 Категории типов данных
- •1.2.2. Целый тип данных
- •1.2.3. Данные плавающего типа
- •1.2.12. Инициализация данных
- •1.3. Выражения и Операции
- •1.3.1. Выражения
- •1.3.2. Операции
- •1.3.3. Операции унарный минус, отрицание и дополнение
- •1.3.4. Операции разадресации и адреса
- •1.3.5. Операция sizeof
- •1.3.6. Мультипликативные операции
- •1.3.7. Аддитивные операции
- •1.3.8. Логические операции
- •1.3.9. Операция последовательного вычисления
- •1.3.10. Условная операция
- •1.3.11. Операции увеличения и уменьшения
- •1.3.12. Составное присваивание
- •1.3.13. Приведение типов
- •1.3.14. Приоритеты операций и порядок вычислений
- •1.4. Операторы
- •1.4.1. Оператор выражение
- •1.4.2. Пустой оператор
- •1.4.3. Составной оператор
- •Ввод с клавиатуры осуществляется оператором scanf()
- •1.4.4. Оператор if
1.2.3. Данные плавающего типа
Для переменных, представляющих число с плавающей точкой используются следующие модификаторы-типа : float, double, long double (в некоторых реализациях языка long double СИ отсутствует).
Величина с модификатором-типа float занимает 4 байта. Из них 1 бит отводится для знака, 8 бит для избыточной экспоненты и 23 бита для мантиссы. Отметим, что старший бит мантиссы всегда равен 1, поэтому он не заполняется, в связи с этим диапазон значений переменной с плавающей точкой приблизительно равен от 3.14E-38 до 3.14E+38.
Величина типа double занимает 8 байт в памяти. Ее формат аналогичен формату float. Биты памяти распределяются следующим образом: 1 бит для знака, 11 бит для экспоненты и 52 бита для мантиссы. С учетом опущенного старшего бита мантиссы диапазон значений равен от 1.7E-308 до 1.7E+308.
Примеры:
float f, a, b;
double x,y;
1.2.12. Инициализация данных
При объявлении переменной ей можно присвоить начальное значение, присоединяя инициатор к описателю. Инициатор начинается со знака "=" , далее следует начальное значение.
Примеры:
int x= 1, y,z=0;
float t=0.56, s= -7.345, q;
1.3. Выражения и Операции
1.3.1. Выражения
Выражение – одно из основных понятий языка Си. Из простейших выражений при помощи операций строятся новые выражения, значения которых вычисляются в процессе выполнения программы.
Под выражением понимаются следующие конструкции:.
Имена переменных, функций,констант, массивов, вызовы функций, ссылки на массивы, структуры и объединения (некоторые из этих понятий будут объяснены позже) являются выражениями.
Выражение, обрамленное круглыми скобками, является варажением.
Знак-унарной-операции выражение тоже является выражением.
Выражение1 знак-бинарной-операции выражение2 - выражение.
Из трех выражений при помощи тернарной операции строится новое выражение:
Выражение1 ? выражение2 : выражение3.
Выражения, из которых при помощи операций строятся более сложные выражения, называются операндами.
Каждое выражение (и операнд) в процессе вычисления принимает некоторое значение определенного типа.
Значение константы равно самой константе. Значение переменной равно значению, которое содержится в соответствующей поименованной области памяти. О значениях остальных исходных выражений мы поговорим позже. Для того, чтобы понять, как определяются значения более сложных выражений, рассмотрим операции языка Си.
1.3.2. Операции
По количеству операндов, участвующих в операции, операции подразделяются на унарные(с одним операндом) , бинарные (с двумя операндами) и тернарные ( с тремя).
В таблицах 7.1 и 7.2 приведены все операцияя языка Си.
Таблица 7.1 Унарные операции
Знак операции |
Операция |
( ) |
Вызов функции |
[ ] |
Ссылка на элемент массива |
–> |
Ссылка на член структуры с помощью указателя |
. |
Ссылка на член структуры |
- |
Унарный минус |
+ |
Унарный плюс |
++ |
Инкремент |
-- |
Декремент |
! |
Логическое отрицание |
~ |
Одинарное дополнение |
* |
Ссылка на указатель |
& |
Адрес |
sizeof |
Размер объекта |
(type) |
Приведение (преобразование) типов |
Таблица 7.2 Бинарные и тернарная операции.
Знак операции |
Операция |
Группа операций |
* |
Умножение |
Мультипликативные |
/ |
Деление |
|
% |
Остаток от деления |
|
+ |
Сложение |
Аддитивные |
- |
Вычитание |
|
<< |
Сдвиг влево |
Операции сдвига |
>> |
Сдвиг вправо |
|
< |
Меньше |
Операции отношения |
<= |
Меньше или равно |
|
>= |
Больше или равно |
|
== |
Равно |
|
!= |
Не равно |
|
& |
Поразрядное И |
Поразрядные операции |
| |
Поразрядное ИЛИ |
|
^ |
Поразрядное исключающее ИЛИ |
|
&& |
Логическое И |
Логические операции |
|| |
Логическое ИЛИ |
|
? : |
Условный оператор |
Тернарная операция |
= |
Присваивание |
Операции присваивания
|
*= |
Умножение с присваиванием |
|
/= |
Деление с присваиванием |
|
%= |
Остаток от деления с присваиванием |
|
-= |
Вычитание с присваиванием |
|
+= |
Сложение с присваиванием |
|
<<= |
Сдвиг влево с присваиванием |
|
>>= |
Сдвиг вправо присваиванием |
|
&= |
Поразрядное И с присваиванием |
|
|= |
Поразрядное ИЛИ с присваиванием |
|
^= |
Поразрядное исключающее ИЛИ с присваиванием |
|
, |
Запятая |
Последовательного вычисления |
Познакомимся поближе с операциями, которые будут необходимы в первую очередь.
Операция присваивания.
Левый операнд операции присваивания должен быть выражением, ссылающимся на область памяти (но не объектом, объявленным с ключевым словом const), такие выражения называются леводопустимыми. К ним относятся:
- идентификаторы данных целого и плавающего типов, типов указателя, структуры, объединения;
- индексные выражения, исключая выражения имеющие тип массива или функции;
- выражения выбора элемента (->) и (.), если выбранный элемент является леводопустимым;
- выражения унарной операции разадресации (*), за исключением выражений, ссылающихся на массив или функцию;
- выражение приведения типа если результирующий тип не превышает размера первоначального типа.
Замечание. На первом этапе в роли леводопустимых операндов будут выступать только идентификаторы – имена переменных.
Выполнение операции операнд1 = операнд2 происходит следующим образом:
вычисляется значение операнда2 и помещается в область памяти, на который ссылается операнд1 (при этом значение, которое хранилось там ранее, уничтожается)
Значение выражения операнд1 = операнд2 равно значению операнда2.