- •Основные элементы языка Си
- •Константы
- •Константы целого типа
- •Задание.
- •Беззнаковые и длинные целые константы
- •Константы с плавающей точкой
- •Escape-последовательности
- •Символьные константы
- •Строковые константы
- •Задание.
- •Вопросы.
- •Основные операции языка Си
- •Общие положения
- •Арифметические операции
- •Унарные операции
- •Унарный минус
- •Операция унарный плюс.
- •Задание.
- •Операции инкремента и декремента
- •Задание.
- •Операции отношения и логические операции
- •Задание.
- •Операции присваивания
- •Примеры.
- •Задание.
- •Побитовые операции
- •Задание.
- •Логические побитовые операции
- •Задание.
- •Маскирование
- •Пример.
- •Задание.
- •Пример.
- •Задание.
- •Пример.
- •Пример.
- •Задание.
- •Пример.
- •Примеры.
- •Примеры.
- •Примеры.
- •Пример.
- •Задание.
- •Побочные эффекты. Приоритеты и порядок выполнения операций
- •Пример.
- •Пример.
-
Арифметические операции
В Си имеется пять арифметических операций: сложение (+), вычитание (-), умножение (*), деление (/) и деление по модулю (%). Операнды арифметических операций должны иметь числовые значения, а форма записи выражений — инфиксная. Все арифметические операции левоассоциативны.
Второй операнд в операциях деления не должен быть равен нулю, а для операции деления по модулю оба операнда должны быть целого типа.
Деление целых чисел приводит к целочисленному результату (делимому).
Правила выполнения всех операций не отличаются от обычных алгебраических, за исключением одного случая. Неясно, какой знак будет получен у остатка при выполнении деления по модулю, если операнды имеют разные знаки. Большинство реализаций Си (в том числе и Microsoft C и Turbo C), присваивают остатку знак первого операнда.
Например,
a |
b |
a/b |
a%b |
11 |
3 |
3 |
2 |
11 |
-3 |
-3 |
2 |
-11 |
3 |
-3 |
-2 |
-11 |
-3 |
3 |
-2 |
Заметим, что стандартом языка оговорено, что всегда должно выполняться соотношение (при b отличном от нуля)
a= (a/b)*b+a%b
(проверьте, что это действительно так).
Типичным применением операции "деление по модулю" является проверка на четность-нечетность операнда: a%2.
При выполнении арифметических операций с операндами различного типа предварительно производится выравнивание типов, которое условно можно охарактеризовать так: происходит преобразование более "короткого" операнда к типу более "длинного". При этом типы по возрастанию располагаются в следующем порядке:
char int long float double long double.
-
Унарные операции
Си имеет несколько операций, применяющихся к единственному операнду (унарных операций). Эти операции имеют приоритет выше, чем арифметические.
-
Унарный минус
Типичный пример такой операции — это унарный минус, который может стоять перед константой, переменной или выражением. Он обозначается тем же символом что и операция вычитания, однако наличие только одного операнда придает ему иной смысл:
-0X1a2 -x -3*(x+y) -5E-9
Можно считать, что в Си все числовые константы положительные, а отрицательные — это выражения из унарного минуса и положительной константы. Для симметрии стандартом языка предусмотрен как дополнительная
-
Операция унарный плюс.
Унарные минус и плюс — это префиксные операции.
-
Задание.
1. Определить значения следующих выражений, если переменные имеют значения a=8, b=3, c=-5:
-
3-4 % 5+6
-
-3*4%-6/5
-
(7+6)%5/2
-
6*-9%10/3
-
a*b/c
-
a*(c%b)
-
(a*c)%b
2. Определить значения следующих выражений, если переменные имеют значения x=8.8, y=3.5,z=-5.2
-
x%y
-
2*x/3*y
-
2*x/(3*y)
3. Определите значения следующих выражений, если с1, с2 и с3 получили значения соответственно 'E', '2', '5' и ? (их десятичные ASCII-коды соответственно 69, 50 и 53, а код символа * равен 42 ):
-
с2-'2'
-
'2'+'2'
-
'3'*c2
-
c3+'*'
-
c2-2
-
(c1/c2)*c3
-
3*c2
-
c1%3
-
('x'-'0')/3
4. Определите значения следующих выражений, при значениях переменных
i=8 j=3 x=0.005 y=0.5 c='c' d='d':
(3*i - 2*j) \% ( 2*d - c)
(i - 3*j) \% ( c + 2*d ) / (x-y)
%\dm