привет, мы снова встречаемся, сегодня мы заканчиваем главу по операторам, давайте учиться вместе
- логический оператор
&& логическое И
|| логическое или
Здесь мы должны различать побитовое и и побитовое или, а также логическое и и логическое или.
1&2----->0
1&&2---->1
1|2----->3
1||2---->1
Побитовые и побитовые или бинарные вычисления, а также логические и логические или истинные или ложные задачи, например, если мы хотим судить о том, является ли год високосным, первое условие, которое должно быть выполнено, кратно четырем и не может быть кратным на 100. Два условия выполняются одновременно, поэтому мы можем записать это так.Есть (x%4==0&&x%100==0)
также условие, которое необходимо выполнить в високосный год, который может делиться на 400. Тогда мы можем записать стандарт того, является ли этот год является високосным следующим образом x%4==0&&x%100==0||x%400==0
.
Логика и обе должны быть истинными, чтобы логика была истинной, и если одна из логик или истинна, то наша логика истинна.
- условный оператор
exp1 ? exp2 : exp3
Если условие exp1 верно, то выполнить exp2, если нет, выполнить exp3, что очень похоже на функцию if
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
int max = 0;
if (a > b)
{
max = a;
}
else
{
max = b;
}
printf("%d", max);
return 0;
}
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
int max = a > b ? a: b;
printf("%d", max);
return 0;
}
Оба кода работают одинаково, но очевидно, что второй выглядит немного проще.
- запятая выражение
exp1, exp2, exp3, expn
Выражения-запятые — это несколько выражений, разделенных запятыми.
Выражения с запятыми выполняются последовательно слева направо. Результатом всего выражения является результат последнего выражения.
#include<stdio.h>
int main()
{
int a = 1;
int b = 2;
int c = (a > b, a = b + 10, a, b = a + 1);
printf("%d", c);
return 0;
}
Пока мы считаем по порядку, мы можем вычислить результат
Выражения с запятыми также могут способствовать оптимизации кода.
-
Ссылки индекса, вызовы функций и элементы структуры
-
[ ][ ] Оператор ссылки на индекс
Операнды: имя массива + значение индекса
int arr[10];//创建数组
arr[9] = 10;//实用下标引用操作符。
[ ]的两个操作数是arr和9。
- ( ) Оператор вызова функции
принимает один или несколько операндов: первый операнд — это имя функции, а остальные операнды — параметры, передаваемые функции.
#include <stdio.h>
void test1()
{
printf("hehe\n");
}
void test2(const char *str)
{
printf("%s\n", str);
}
int main()
{
test1(); //实用()作为函数调用操作符。
test2("hello bit.");//实用()作为函数调用操作符。
return 0;
}
- Доступ к элементу структуры
Структура Имя элемента
-> Указатель структуры -> Имя элемента
Давайте приведем пример, чтобы проиллюстрировать, как использовать эти два символа.Сейчас
мы собираемся создать информацию об учащемся.Во-первых, есть ли имя, затем его возраст, а во-вторых, мы определяем пол, поэтому нам нужно использовать структуру здесь Тело является структурой.
#include<stdio.h>
struct student
{
char name[20];//放名字
int age;//放年龄
char sex[5];//放性别
};
int main()
{
struct student s1 = {
"张三",18,"男" };
printf("%s %d %s", s1.name, s1.age, s1.sex);
return 0;
}
Это наше использование Далее мы рассмотрим, как использовать тот же код -> использовать
#include<stdio.h>
struct student
{
char name[20];//放名字
int age;//放年龄
char sex[5];//放性别
};
int main()
{
struct student s1 = {
"张三",18,"男" };
//printf("%s %d %s", s1.name, s1.age, s1.sex);
struct student* ps1=&s1;
printf("%s %d %s", ps1->name, ps1->age, ps1->sex);
return 0;
}
Неважно, если вы не понимаете структуру здесь, я расскажу об этом позже, и я сказал это раньше, так что вы можете оглянуться назад
- оценка выражения
Порядок, в котором вычисляются выражения, частично определяется приоритетом и ассоциативностью операторов.
Точно так же операнды некоторых выражений могут нуждаться в преобразовании в другие типы во время вычисления.
- .1 Неявное преобразование типов
Целочисленные арифметические операции C всегда выполняются с точностью не ниже целочисленного типа по умолчанию.
Чтобы достичь такой точности, символьные и короткие целые операнды в выражениях перед использованием преобразуются в простые целочисленные типы. Это преобразование известно как целочисленное преобразование.
Значение целочисленного продвижения
Целочисленная операция выражения должна выполняться в соответствующем вычислительном устройстве ЦП Длина байта операнда целочисленного арифметического устройства (ALU) в ЦП обычно равна длине байта int,
и это также общее назначение процессора.Длина регистра.
Следовательно, даже если сложение двух типов char фактически выполняется ЦП, оно должно быть сначала преобразовано в стандартную длину целочисленного операнда в ЦП.
ЦП общего назначения (ЦП общего назначения) сложно напрямую добавить два 8-битных байта (хотя
в машинных инструкциях могут быть такие инструкции по сложению байтов). Следовательно, различные целочисленные значения в выражении, длина которого может быть меньше длины int, должны быть преобразованы в int или unsigned int перед отправкой в ЦП для выполнения операций.
Возьмем пример
#include<stdio.h>
int main()
{
char c1 = -1;
printf("%d", c1);
return 0;
}
// Отрицательное целочисленное продвижение
char c1 = -1;
в двоичном бите (коде дополнения) переменной c1 всего 8 битов:
1111111
Поскольку char является символом со знаком
, при выполнении пластического преобразования старший бит дополняет знак бит, что равно 1
Результат после повышения:
1111111111111111111111111111111
Целочисленные акции для целых чисел
char c2 = 1,
в двоичном коде (дополнительном коде) переменной c2 всего 8 бит:
00000001
Поскольку char является знаковым char
, при продвижении пластика к старшему биту добавляется знаковый бит, равный 0
. результат после продвижения:
000000000000000000000000000000001
Обратите внимание, что числа без знака должны быть заполнены только нулями.
2 Арифметические преобразования
Если операнды оператора имеют разные типы, операция не может быть выполнена до тех пор, пока один из операндов не будет преобразован в тип другого. Приведенная ниже иерархия называется обычными арифметическими преобразованиями.
Если тип операнда занимает более низкое место в приведенном выше списке, операция должна быть сначала преобразована в тип другого операнда.
ПРЕДУПРЕЖДЕНИЕ.
Но арифметические преобразования должны быть разумными, иначе могут возникнуть некоторые потенциальные проблемы.
float f = 3.14;
int num = f;//隐式转换,会有精度丢失
Свойства операторов
На вычисление сложных выражений влияют три фактора.
- приоритет оператора
- ассоциативность операторов
- Следует ли контролировать порядок оценки.
Таким образом, наша часть оценки выражения определяется приоритетом оператора
На сегодня все, до встречи в следующий раз