Кафедра: Автоматика и информационные технологии


ОПЕРАЦИИ ЯЗЫКА СИ


Содержание

ХАРАКТЕРИСТИКИ ОПЕРАЦИЙ

Таблица приоритетов операций

Комментарии к операциям

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

В выражениях

В присваиваниях

ЛАБОРАТОРНЫЕ ЗАДАНИЯ

Основные арифметические операции

Операции присваивания.

Логические операции и операции инкремента.

Поразрядные операции.

Отношения и условия

Выполнение операций и их приоритеты

Основные типы данных

Приведение целых и вещественных типов

Приведение целых и вещественных выражений

ОТВЕТЫ К ЗАДАНИЯМ

ДОПОЛНИТЕЛЬНЫЕ ЗАДАНИЯ

БИБЛИОГРАФИЧЕСКИЙ СПИСОК


Характеристики операций

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

По количеству аргументов операции бывают унарные, бинарные и имеется одна тернарная операция «Условие».

Если одна и та же операция встречается в выражении несколько раз, то говорят о лево-ассоциативных и право-ассоциативных операциях. В первом случае данная операция выполняется слева направо, во втором – справа налево.

  Таблица приоритетов операций

Операции, расположенные в таблице выше, имеют больший приоритет.

Таблица 1

№ операции Группа операций Обозначение операции Название операции Название на сленге Ассоциативность
1             первичные () круглые скобки 1. () [] -> :: . ®
2             [] индексация Квадратные скобки ®
3             -> Обращение к элементу структуры по указателю на структурную переменную стрелка ®
4             :: Разрешение видимости Четвероточие ®
5             . Обращение к элементу структуры по имени структурной переменной Точка ®
6             унарные ! Логическое отрицание Восклицательный знак
7             ~ Побитовое инвертирование Тильда
8             ++

Автоматический инкремент ++х;

Отложенный инкремент х++

Плюс-плюс
9             --

Автоматический декремент --х;

Отложенный декремент х--

Минус-минус
10           - Обращение знака Минус
11           + Подтверждение знака плюс
12           (тип) Явное приведение типа
13           * Разыменование указателя Звездочка
14           & Взятие адреса Амперсанд
15           sizeof Размер в байтах аргумента sizeof
16           new Операция выделения динамической памяти new
17           delete Операция освобождения динамической памяти delete
18           мультипликативные * умножение умножение ®
19           / деление деление ®
20           % Деление по модулю процент ®
21           аддитивные

+

-

Сумма

разность

Сложение

Разность

®
22           сдвиги <<  Побитовый сдвиг влево Меньше-меньше ®
23           >>  Побитовый сдвиг вправо больше-больше ®
24           отношения

<

<=

>

>=

Меньше

Меньше равно

Больше

Больше равно

®
25           Сравнение == Сравнение на равенство ®
26           != Сравнение на неравенство 3. .* ->* ®
27           поразрядные & Побитовое «И» амперсанд ®
28           ^ Побитовое взаимоисключающее «ИЛИ» крышка ®
29           | Побитовое «ИЛИ» Побитовое «ИЛИ»
30           логические && Логическое «И» «И»
31           || логическое «ИЛИ» «ИЛИ»
32           Условие ?: Условное выражение Вопросительный знак
33           присваивания = Присваивание Равно
34           *= /= %= += -= &= ^= |= <<= >>= Комбинированные присваивания Умножить равно и т.д.
35           запятая , запятая запятая ®

Ассоциативность «слева направо» означает группировку операций таким образом: запись A1 @ A2 @ A3 означает ((A1 @ A2) @ A3).

Ассоциативность «справа налево» обрабатывает запись A1 @ A2 @ A3 как (A1 @ (A2 @ A3)).

Комментарии к операциям

1. () – самая сильная операция. Выражение (2*(4+5)) равно 18.

2. [] индексирует элементы массивов. А[3][6] – в третьей строке шестой элемент. Индексация начинается с нуля, то есть А[0][0] – начальный элемент массива.

3. Операция -> используется с указателями на структурные переменные и на объекты классов. Например,

struct Pixel

{

int x, y;

char col;

};

Pixel A, *ptr;

ptr = &A;

ptr->x = 100;

4. Операция :: применятся для обращения к глобальным переменным, скрытым локальными переменными.

int x = 2;

void main()

{

int x=5;

printf(“%d”, x + ::x); // 7

}

5. Операция “точка” используется с структурными переменными и над объектами классов. Например,

Pixel A;

А.x = 100;

6. В языке Си нет логических констант true и false. Вместо этого все, что не ноль считается истинным, а ноль любого типа считается ложью. При этом представителем истины является 1.

Таблица 2.

Таблица истинности операции логического отрицания

x ноль не ноль
!x 1 0

7. Побитовое инвертирование применяется только к целым аргументам. Для получения результата аргумент необходимо преобразовать в двоичную систему счисления. Количество разрядов должно соответствовать типу аргумента.

Таблица 3.

Таблица истинности

x 0 1
~x 1 0

Пример.

char x = 20, y;

y= ~x;

Так как х = 20 = 000101002, то y = 11101011. Переменная y является знаковой, поэтому ее содержимое компилятор будет интерпретировать как число со знаком, то есть отрицательное. Найдем это число из схемы

y = 1110 1011

+

-y = 0001 0101

= 0000 0000

Так как –y = 21, то y = -21.

8. Автоматический инкремент увеличивает аргумент на единицу. Применяется к любым типам. Операция ++x эквивалентна оператору x = x + 1, но занимает меньше места и удобнее в сложных выражениях. Отложенный инкремент x++ увеличивает аргумент на единицу при следующей встрече этой переменной. Не учитывается ее использование в строках и комментариях. Заметим, что название языка Си++ происходит от этой операции Автор Си++ Б.Страустрап видимо, предполагал, что этот язык на порядок лучше своего предшественника, языка Си.

9. Операция декремента аналогично уменьшает аргумент на единицу.

Пример. int x = 2, y = 4, z;

z = x++ + ++x + y-- + --y;

В результате x = 4, y = 2, z = 2 + 4 + 4 + 3 = 13.

10. Операция –x является стандартной, она не меняет значения x.

11. Операция +x лишена смысла.

12. Явное преобразование типа не меняет типа своего аргумента и влияет только на тип результата. Запись (int)2.1 вернет число 2. Используется, как правило, при работе с указателями. Для числовых констант применяется неявное преобразование типа.

13. Операция «звездочка» применяется только к указателю и возвращает переменную, на которую указывает этот указатель. Может находиться в левой части операции присваивания (Lvalue) и в правой части (Rvalue). В первом случае результат операции – сама ячейка, на которую указывает указатель, Во втором случае – содержимое этой ячейки.

14. Взятие адреса применяется к любому идентификатору, с которым связана область ОЗУ. Возвращает логический адрес самого левого байта памяти, которую занимает этот идентификатор. Это могут быть переменные базовых типов, другие указатели, элементы массивов, структурные переменные. Для определения типа результата этой операции, надо добавить к типу аргумента одну звездочку.

Пример.

int x = 3, y, *px;

px = &x; // указатель px указывает на переменную x

y =* px; // y=3

*px = y+1; // x=4

Типом выражения &y является int*, а тип записи &px это int **.

15. Операция sizeof возвращает размер «чего угодно» в байтах. Например, sizeof(float) = 4, sizeof(20) = 2, для дальних адресов sizeof(float*) = 4.

16. Операция new выделяет динамическую память и введена в языке Си++. Ее аналогом в Си является функция malloc.

17. Операция delete освобождает динамическую память, выделенную ранее операцией new. Ее аналогом в Си является функция free.
Пример.

int *pi = new int;

*pi = 100;

delete pi;

18. Умножение * является обычной операцией.

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

20. Деление % применяется только для двух целых аргументов и возвращает целочисленный остаток от деления.

Например, 20.0/3 = 6.33333, 20/3 = 6, 20%3 = 2.

Пример. Имеет место тождество

b = a * (b/a) + b%a.

Пример. Если m – трехзначное целое число abc, то a = m/100, c = m%10, b = m%100/10.

Мультипликативные операции имеют одинаковый приоритет.


Информация о работе «Операции языка Cи»
Раздел: Информатика, программирование
Количество знаков с пробелами: 18794
Количество таблиц: 4
Количество изображений: 0

Похожие работы

Скачать
44508
7
0

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

Скачать
424070
0
0

... буквы из имеющихся двадцати шести букв/. 4.5. Правила, определяющие область действия. Функции и внешние переменные, входящие в состав “C”-программы, не обязаны компилироваться одновременно; программа на исходном языке может располагаться в нескольких файлах, и ранее скомпилированные процедуры могут загружаться из библиотек. Два вопроса представляют интерес: Как следует составлять описания, чтобы ...

Скачать
112819
0
0

... . Объясните, для чего служат разрешения и привилегии в Windows NT. Зав. кафедрой --------------------------------------------------   Экзаменационный билет по предмету СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ Билет № 22 Перечислите возможности и инструменты системы программирования Microsoft Developer Studio. Укажите для чего предназначается буфер в системах ввода-вывода, ...

0 комментариев


Наверх