- •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.3.3. Операции унарный минус, отрицание и дополнение
Операция унарный минус (арифметическое отрицание) (-) вырабатывает отрицание своего операнда. Операнд должен быть целой или плавающей величиной. При выполнении осуществляются обычные арифметические преобразования.
Пример:
double u = 5;
u = -u; /* переменной u присваивается ее отрицание,
т.е. u принимает значение -5 */
Операция логического отрицания "НЕ" (!) вырабатывает значение 0, если операнд есть истина (не нуль), и значение 1, если операнд равен нулю (0). Результат имеет тип int. Операнд должен быть целого или плавающего типа.
Пример:
int t, z=0;
t=!z;
Переменная t получит значение равное 1, так как переменная z имела значение равное 0 (ложно).
Операция двоичного дополнения (~) вырабатывает двоичное дополнение своего операнда. Операнд должен быть целого типа. Осуществляется обычное арифметическое преобразование, результат имеет тип операнда после преобразования.
Пример:
char b = '9';
unsigned char f;
b = ~f;
Шестнадцатеричное значение символа '9' равно 39. В результате операции ~f будет получено шестнадцатеричное значение С6, что соответствует символу 'ц'.
1.3.4. Операции разадресации и адреса
На первое время нас будет интересовать только операция адреса.
Операция адрес (&) дает адрес своего операнда, т.е. адрес первого байта того фрагмента памяти, в котором располагается значение операнда. Операндом может быть любое именуемое выражени, например, переменная.
Примеры:
int t;
scanf(”%i”, &t);
/* ввести с клавиатуры целочисленное значение ипоместиь его в
оперативной памяти, начиная с байта с адресом &t */
1.3.5. Операция sizeof
С помощью операции sizeof можно определить размер памяти, которая соответствует идентификатору или типу. Операция sizeof имеет следующий формат:
sizeof(выражение) .
В качестве выражения может быть использован любой идентификатор, либо имя типа, заключенное в скобки.
Пример:
int a1,i,j;
double t;
i= sizeof(a1);
j= sizeof(double);
Переменная i получит значение, равное 4, переменная j - значение, равное 8.
1.3.6. Мультипликативные операции
К этому классу операций относятся операции умножения (*), деления (/) и получение остатка от деления (%). Операндами операции (%) должны быть целые числа. Отметим, что типы операндов операций умножения и деления могут отличаться, и для них справедливы правила преобразования типов. Типом результата является тип операндов после преобразования.
Операция умножения (*) выполняет умножение операндов.
int i=5;
float f=0.2;
double g,z;
g=f*i;
Тип произведения i и f преобразуется к типу double, затем результат присваивается переменной g.
Операция деления (/) выполняет деление первого операнда на второй. Если две целые величины не делятся нацело, то результат округляется в сторону нуля.
При попытке деления на ноль выдается сообщение во время выполнения.
int i=49, j=10, n, m;
n = i/j; /* результат 4 */
m = i/(-j); /* результат -4 */
Операция остаток от деления (%) дает остаток от деления первого операнда на второй.
Знак результата зависит от конкретной реализации. В данной реализации знак результата совпадает со знаком делимого. Если второй операнд равен нулю, то выдается сообщение.
int n = 49, m = 10, i, j, k, l;
i = n % m; /* 9 */
j = n % (-m); /* 9 */
k = (-n) % m; /* -9 */
l = (-n) % (-m); /* -9 */