Операторы C: Ваше введение в магию программирования
Привет, будущие маги кодирования! ? Я рад быть вашим проводником в этом увлекательном путешествии по миру программирования на языке C. Сегодня мы погрузимся в мир операторов в C. Не волнуйтесь, если вы никогда не писали ни одной строки кода – мы начнем с самого начала и будем развиваться вместе.
Арифметические операторы: Основные заклинания
Начнем с самых простых заклинаний в нашей книге заклинаний программирования – арифметические операторы. Это основные блоки большинства вычислений в C.
Пятерка арифметики
Вот пять основных арифметических операторов:
Оператор | Название | Пример |
---|---|---|
+ | Сложение | 5 + 3 = 8 |
- | Вычитание | 7 - 2 = 5 |
* | Умножение | 4 * 6 = 24 |
/ | Деление | 10 / 2 = 5 |
% | Остаток от деления | 7 % 3 = 1 |
Давайте посмотрим, как они работают:
#include <stdio.h>
int main() {
int a = 10, b = 3;
printf("Сложение: %d\n", a + b);
printf("Вычитание: %d\n", a - b);
printf("Умножение: %d\n", a * b);
printf("Деление: %d\n", a / b);
printf("Остаток от деления: %d\n", a % b);
return 0;
}
При выполнении этого кода вы увидите:
Сложение: 13
Вычитание: 7
Умножение: 30
Деление: 3
Остаток от деления: 1
Заметьте, как деление дает нам 3 вместо 3.33? Это происходит потому, что при делении целых чисел в C мы получаем целое значение. Оператор остатка (%) дает нам остаток от деления.
Реляционные операторы: Сравнение яблок и апельсинов
Теперь, когда мы можем выполнять основные математические операции, давайте научимся сравнивать вещи. Реляционные операторы – это как судьи на конкурсе талантов – они сравнивают два значения и сообщают нам, как они относятся друг к другу.
Вот наши реляционные операторы:
Оператор | Значение | Пример |
---|---|---|
== | Равно | 5 == 5 – истина |
!= | Не равно | 5 != 3 – истина |
> | Больше | 7 > 3 – истина |
< | Меньше | 2 < 8 – истина |
>= | Больше или равно | 5 >= 5 – истина |
<= | Меньше или равно | 4 <= 4 – истина |
Давайте применим их:
#include <stdio.h>
int main() {
int x = 5, y = 8;
printf("x == y: %d\n", x == y);
printf("x != y: %d\n", x != y);
printf("x > y: %d\n", x > y);
printf("x < y: %d\n", x < y);
printf("x >= y: %d\n", x >= y);
printf("x <= y: %d\n", x <= y);
return 0;
}
Это выведет:
x == y: 0
x != y: 1
x > y: 0
x < y: 1
x >= y: 0
x <= y: 1
В C 0 означает ложь, а любое не нулевое значение (обычно 1) означает истину. Таким образом, мы можем увидеть, что 5 действительно не равен 8, и он меньше 8.
Логические операторы: Мakers решений
Логические операторы – это как мудрые старцы нашего программного поселения. Они помогают нам делать сложные решения, комбинируя более простые условия.
Вот наши логические операторы:
Оператор | Значение | Пример |
---|---|---|
&& | И | (5 > 3) && (4 < 7) – истина |
|| | ИЛИ | (5 > 8) || (4 < 7) – истина |
! | НЕ | !(5 > 8) – истина |
Давайте посмотрим, как они работают:
#include <stdio.h>
int main() {
int a = 5, b = 3, c = 8;
printf("(a > b) && (c > a): %d\n", (a > b) && (c > a));
printf("(a > b) || (a > c): %d\n", (a > b) || (a > c));
printf("!(a > b): %d\n", !(a > b));
return 0;
}
Это выведет:
(a > b) && (c > a): 1
(a > b) || (a > c): 1
!(a > b): 0
Оператор И (&&) возвращает истину только если оба условия истинны. Оператор ИЛИ (||) возвращает истину, если хотя бы одно условие истинно. Оператор НЕ (!) инвертирует истинное значение.
Битовые операторы: Маги бинарных чисел
Теперь мы входим в область бинарной магии. Битовые операторы работают напрямую с бинарными представлениями чисел. Они похожи на микроскопы в мире программирования, позволяя нам видеть и манипулировать отдельными битами.
Вот наши битовые операторы:
Оператор | Название | Пример |
---|---|---|
& | Побитовое И | 5 & 3 = 1 |
| | Побитовое ИЛИ | 5 | 3 = 7 |
^ | Побитовое Исключающее ИЛИ | 5 ^ 3 = 6 |
~ | Побитовое НЕ | ~5 = -6 |
<< | Сдвиг влево | 5 << 1 = 10 |
>> | Сдвиг вправо | 5 >> 1 = 2 |
Давайте посмотрим, как они работают:
#include <stdio.h>
int main() {
unsigned int a = 5, b = 3; // 5 равен 101 в двоичной системе, 3 равен 011
printf("a & b = %u\n", a & b); // 101 & 011 = 001
printf("a | b = %u\n", a | b); // 101 | 011 = 111
printf("a ^ b = %u\n", a ^ b); // 101 ^ 011 = 110
printf("~a = %d\n", ~a); // ~101 = ...11111010 (двойное дополнение)
printf("a << 1 = %u\n", a << 1); // 101 становится 1010
printf("a >> 1 = %u\n", a >> 1); // 101 становится 10
return 0;
}
Это выведет:
a & b = 1
a | b = 7
a ^ b = 6
~a = -6
a << 1 = 10
a >> 1 = 2
Эти операторы особенно полезны при работе с низкоуровневым программированием или при оптимизации вашего кода.
Операторы присваивания: Изменители значений
Операторы присваивания – это как писатели нашего программного мира. Они записывают (или присваивают) значения переменным. Давайте познакомимся с нашими операторами присваивания:
Оператор | Пример | Эквивалентно |
---|---|---|
= | x = 5 | x = 5 |
+= | x += 3 | x = x + 3 |
-= | x -= 2 | x = x - 2 |
*= | x *= 4 | x = x * 4 |
/= | x /= 2 | x = x / 2 |
%= | x %= 3 | x = x % 3 |
<<= | x <<= 2 | x = x << 2 |
>>= | x >>= 1 | x = x >> 1 |
&= | x &= 3 | x = x & 3 |
^= | x ^= 5 | x = x ^ 5 |
|= | x |= 3 | x = x | 3 |
Вот краткий пример:
#include <stdio.h>
int main() {
int x = 10;
x += 5; // x теперь равен 15
printf("После x += 5: %d\n", x);
x *= 2; // x теперь равен 30
printf("После x *= 2: %d\n", x);
x %= 7; // x теперь равен 2 (30 % 7 = 2)
printf("После x %%= 7: %d\n", x);
return 0;
}
Это выведет:
После x += 5: 15
После x *= 2: 30
После x %%= 7: 2
Эти операторы являются сокращениями, которые делают наш код более кратким и часто более читаемым.
Прочие операторы: Спецназ
Теперь познакомимся с некоторыми специальными операторами, которые не вписываются в наши другие категории.
Оператор sizeof
Оператор sizeof
сообщает нам размер переменной или типа данных в байтах. Он похож на мерачный трос для наших данных.
#include <stdio.h>
int main() {
int x;
char c;
float f;
printf("Размер int: %zu байт\n", sizeof(x));
printf("Размер char: %zu байт\n", sizeof(c));
printf("Размер float: %zu байт\n", sizeof(f));
return 0;
}
Это может вывести (в зависимости от вашей системы):
Размер int: 4 байта
Размер char: 1 байт
Размер float: 4 байта
Тернарный оператор
Тернарный оператор – это как компактная форма if-else. Он записывается как condition ? value_if_true : value_if_false
.
#include <stdio.h>
int main() {
int x = 10;
int y = (x > 5) ? 1 : 0;
printf("y = %d\n", y);
return 0;
}
Это выведет:
y = 1
Потому что x больше 5, y присваивается значение 1.
Приоритет операций в C: Иерархия
Так же, как и в математике, в C есть иерархия операций. Эта иерархия определяет, какие операции выполняются первыми, когда используются несколько операторов в одном выражении.
Вот упрощенная таблица приоритетов, от высших к низшим:
Приоритет | Оператор |
---|---|
1 | () [] -> . |
2 | ! ~ ++ -- + - * & (type) sizeof |
3 | * / % |
4 | + - |
5 | << >> |
6 | < <= > >= |
7 | == != |
8 | & |
9 | ^ |
10 | | |
11 | && |
12 | || |
13 | ?: |
14 | = += -= *= /= %= &= ^= |= <<= >>= |
15 | , |
Помните, если у вас есть сомнения, используйте скобки, чтобы сделать ваши намерения яснее!
Другие операторы в C: Сокровища
Есть еще несколько операторов в C, которые мы не обсуждали:
- Оператор запятая (,): Он позволяет использовать несколько выражений, где ожидается только одно.
- Оператор адреса (&): Он возвращает адрес памяти переменной.
- Оператор dereference (*): Он доступает к значению по конкретному адресу памяти.
- Оператор член структуры (.): Он доступает к членам структуры.
- Оператор указатель на член структуры (->): Он доступает к членам структуры через указатель.
Мы разберем эти операторы более подробно, когда погружемся в указатели и структуры в будущих уроках.
Итак, вот и все! Мы погружались в мир операторов в C, от простых арифметических заклинаний до сложных битовых манипуляций. Помните, практика – это ключ к совершенству, так что не стесняйтесь экспериментировать с этими операторами в своем коде. Счастливого кодирования, и май будь с вами в пользу! ?♂️?
Credits: Image by storyset