Элементарный язык C - подробное объяснение операторов (2)

привет, мы снова встречаемся, сегодня мы заканчиваем главу по операторам, давайте учиться вместе

  1. логический оператор

&& логическое И
|| логическое или

Здесь мы должны различать побитовое и и побитовое или, а также логическое и и логическое или.

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.

Логика и обе должны быть истинными, чтобы логика была истинной, и если одна из логик или истинна, то наша логика истинна.

  1. условный оператор

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;
}

Оба кода работают одинаково, но очевидно, что второй выглядит немного проще.

  1. запятая выражение

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;
}

вставьте сюда описание изображения
Пока мы считаем по порядку, мы можем вычислить результат

Выражения с запятыми также могут способствовать оптимизации кода.

  1. Ссылки индекса, вызовы функций и элементы структуры

  2. [ ][ ] Оператор ссылки на индекс
    Операнды: имя массива + значение индекса

int arr[10];//创建数组
 arr[9] = 10;//实用下标引用操作符。
 [ ]的两个操作数是arr和9
  1. ( ) Оператор вызова функции
    принимает один или несколько операндов: первый операнд — это имя функции, а остальные операнды — параметры, передаваемые функции.
#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;
 }
  1. Доступ к элементу структуры
    Структура Имя элемента
    -> Указатель структуры -> Имя элемента

Давайте приведем пример, чтобы проиллюстрировать, как использовать эти два символа.Сейчас
мы собираемся создать информацию об учащемся.Во-первых, есть ли имя, затем его возраст, а во-вторых, мы определяем пол, поэтому нам нужно использовать структуру здесь Тело является структурой.

#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. оценка выражения

Порядок, в котором вычисляются выражения, частично определяется приоритетом и ассоциативностью операторов.
Точно так же операнды некоторых выражений могут нуждаться в преобразовании в другие типы во время вычисления.

  • .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;//隐式转换,会有精度丢失

Свойства операторов
На вычисление сложных выражений влияют три фактора.

  1. приоритет оператора
  2. ассоциативность операторов
  3. Следует ли контролировать порядок оценки.

Таким образом, наша часть оценки выражения определяется приоритетом оператора

На сегодня все, до встречи в следующий раз

Supongo que te gusta

Origin blog.csdn.net/2301_76895050/article/details/131615745
Recomendado
Clasificación