Загрузка...

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


Операции в языке Си применяются для представления арифметических выражений. Насчитывается около 40 операций и 16 приоритетов. Величина, над которой выполняется операция называется операндом. Операции могут быть унарные (один операнд), бинарные (два операнда) и тернарные.

Арифметические операции

Можно выполнять действия над переменными, переменными и константами, константами.
Самый высокий приоритет у скобок (1)
Приоритеты
1) Изменение знака — r = -12; -r (2)
2) Умножения * сm = 2,54 *in; (3)
3) Деления / var = 12.0 / 3.0; У целых чисел при делении дробная часть
отбрасывается (происходит усечение) x = 5 / 3 (х примет значение 1) (3)
4) % — деление по модулю ( используется только для целых чисел)
х = 5%3 ( в результате получается остаток от деления х примет значение 2) (3)
5) Сложение + sum = 20+10; sum = 20 + x ; sum = hou + sec; (4)
6) Вычитание – (4)
7) Операции автоуменьшения — и автоувеличения ++ на 1 (2)
++i — префиксная форма (увеличение переменной i происходит до следующей операции)
i++ — постфиксная форма (после)
Примеры:
++size < 18,5 сначала произойдет увеличение переменной, а затем сравнение с числом 18,5
size++ <18,5 сначала сравнение, а затем увеличение на 1.
Пусть переменным присвоены следующие значения:
y=2; n=3;
В результате операции y=n++ сначала переменной y присвоится значение переменной n, а затем n увеличится на 1. Y z станет равным 3, а n — 4
next=(y+n++)*6; в этом случае сначала произойдет сложение, а затем n увеличится на 1 ( на результате это не отразится) (2+3)*6=30; n=4;
next=(y+(++n))*6; в этом случае сначала n увеличится на 1. А затем уже числа будут складываться (2+4)*6=36; n=4;

8)Операция определения размера sizeof (2)
Можно определять размерность ( количество байт) типа sizeof (int); а также размер переменных sizeof x;
9) Операция присваивания = (15)
Знак = не означает в этом случае равенство. Это присваивание некоторого значения.
val = 3,75; PI = 3,14;
i = i+1; математически это неверно, но поскольку = это не знак равенства, то эта запись в СИ верна. Она означает – к значению переменной i прибавить 1 и новое значение присвоить переменной с именем i.
Можно одно значение присваивать нескольким переменным (присваивается справа налево)
y = x = z = 1;
Нельзя присваивать значения константам. Поэтому при присваивании слева от знака = не может быть константы:
3,75 = val не верно

10) Операция следования , (запятая)
х=5, у=24; (16)
Выражения, разделенные запятой, будут выполняться слева направо. Символ запятая может также использоваться как разделитель (в операторах).

Операции отношения.

Используются для сравнения в условных выражениях.
<, <=, >=, >, != (не равно), = = (равно). (7,8)
Не следует путать знаки = и = =. С помощью операции присваивания (=)некоторой переменной слева от этого знака присваивается значение. А с помощью операции отношений (= =) проверяется равенство выражений, стоящих слева и справа от этого знака.
Все операции отношений возвращают результат «истина» или «ложь» (0 или 1). Значение переменных при этом не изменяется.
При сравнении float лучше пользоваться только операциями < и >, т.к. ошибки округления могут привести к тому, что числа окажутся неравными, хотя по логике они должны быть равны. (например 3*1/3 равно 1,0, но 1/3 в вещественном формате будет представлена как 0,999999…, и произведение не будет равно 1)
Приоритет больше чем у операции присваивания, но меньше чем у +, -.
y > x+2; — сначала сложение, затем сравнение.

Логические операции

Используются для проверки условия, вырабатывая значение истина или ложь.
1) && «И» (операция умножения. Выражение истинно только в том случае, если истинны выражения, стоящие до и после &&. Если первое – ложь, то дальше не проверяется) (12)
2) || «ИЛИ» ( сложение. Выражение истинно, если одно из выражений истинно. Если первое – истина, дальше не проверяется) (13)
3) ! «НЕ» (отрицание) (2)
Булева логика:
x y && || !
0 0 0 0 0 1
1 0
0 1 0 1
1 0 0 1
1 1 1 1
Пр.: if(x>0 && x<10) действие
5>2 && 4>7 — ложь
5>2 || 4>7 — истина
!(4>7) – истина

У операции ! очень высокий приоритет (выше только у скобок). && и || выше присваивания, но ниже чем отношения
a>b && b>c || b>d
((a>b) && (b>c) || (b>d))

main() { // Программа считающая символы.
int ch, charcount = 0;
while((ch = getchar()) ! = EOF)
if(ch!= ‘ ‘ && ch != ‘\n’ && ch != ‘\t’)
charcount ++;
printf(«Всего % d непустых символов.\n», charcount);
}
while – оператор цикла. Сначала осуществляется проверка истинности условия, заключенного в круглые скобки. Функция getchar() получает один символ, введенный с клавиатуры и передает его выполняющей программе. Эта функция не имеет аргументов (т.е. в круглые скобки ничего не вводится). В нашем примере введенный символ присваивается переменной ch. Чтобы прервать ввод символов вводится специальный признак EOF (end of file). Обычно определение символа EOF содержится в файле stdio.h (#). Если условие истинно, осуществляется переход к следующему оператору. В следующем операторе проверяется условие: если введенный символ не равен пробелу, символу перехода на новую строку и символу табуляции, то происходит наращивание символов и переход к началу цикла. Когда условие будет ложным, будет выполняться следующий оператор (printf). Если в цикле только один оператор, то цикл выполняется от слова while до точки с запятой. Если операторов несколько, то в область действия оператора нужно включить фигурные скобки.

Операции с разрядами

Поразрядные логические операции. Приводят к изменению значения переменной. Действия производятся над данными класса целых и char. Они называются поразрядными, потому что они выполняются отдельно над каждым разрядом независимо от разряда, находящегося слева или справа.
1) ~ Дополнение до 1 или поразрядное отрицание. Это унарная операция изменяет каждую 1 на 0, а 0 на 1.
~(11010) получим (00101)
2) & Поразрядное И или служит для сбрасывания битов. Эта бинарная операция сравнивает последовательно разряд за разрядом два операнда. Результат равен 1, если оба соответствующих разряда операндов равны 1
(10010011) & (00111101) => (00010001)
3) | Поразрядное ИЛИ служит для установки битов. Эта бинарная операция сравнивает последовательно разряд за разрядом два операнда. Результат равен 1, если один (или оба) из соответствующих разряда операндов равен 1.

(10010011) | (00111101) => (10111111)

4) ^ Исключающие ИЛИ. Результат равен 1, если один из разрядов равен 1 (но не оба)
(10010011) ^ (00111101) => (10101110)

Загрузка...