Explicación detallada de los operadores (lenguaje c)

Introducción:
¡Hola a todos! Mi nombre es sy. Hoy compartiré con ustedes una explicación detallada de los operadores en lenguaje C. Sabemos que una característica distintiva del lenguaje C es la aplicación de expresiones. Las expresiones son fórmulas que representan cómo calcular valores, y los operadores se utilizan para construir expresiones Herramientas básicas, el lenguaje C tiene un conjunto muy rico de operadores, incluidos operadores aritméticos, operadores relacionales, operadores lógicos, operadores de asignación, operadores de operaciones de bits, operadores de incremento y decremento, operadores condicionales, operadores de coma, operadores de punteros, operadores de conteo de bytes , operadores de reparto y operadores especiales. Este artículo explica cada operador con gran detalle, ¡echemos un vistazo ~! !

1. Operadores aritméticos (incluidos +, -, *, /, %)

·1.El operador aritmético es un operador ampliamente utilizado en muchos lenguajes de programación, incluido el lenguaje C. Este tipo de operador puede realizar sumas, restas, multiplicaciones, divisiones y restos.
·2. Tanto los operadores de suma como de multiplicación son operadores binarios y requieren dos operandos, mientras que los operadores unarios solo requieren un operando: i=+1; i=-1; (generalmente + no hace nada) *3. Cabe señalar que,
excepto para El operador %, otros operadores aritméticos binarios permiten que los operandos sean tanto números enteros como números de coma flotante, y también es posible una combinación de los dos. El operador restante % requiere que el operando sea un número entero. Si uno de los dos números no es un número entero, la compilación no pasará.
*4.Operador '/' Cuando ambos operandos son números enteros, el operador '/' descartará la parte fraccionaria para interceptar el resultado. Entonces el resultado de 1/2 es 0 en lugar de 0,5.

//当int型操作数和float型操作数混合在一起时,运算结果是float型的
	int a = 7;
	float b = 3.5;
	printf("%f\n", a + b);
	printf("%f\n", a/b);

El resultado de la operación es el siguiente.

2. Operadores relacionales (incluidos >, <, ==, >=, <=, !=)

·1. El resultado de una expresión en lenguaje C es 0 (falso) o 1 (verdadero). Por ejemplo, el valor de la expresión 3<5 es 1 y el valor de 3>5 es 0; los operadores relacionales también son adecuados para comparar números de punto flotante. , también permite la comparación de operandos mixtos, como por ejemplo: el valor de 1<2.5 es 1; ·
2. La prioridad de los operadores relacionales es menor que la de los operadores aritméticos, por ejemplo: la expresión i+j <k-1 significa (i +j)<(k-1).Los operadores relacionales son asociativos por la izquierda.
* 3. Nota: i<j<k es legal en lenguaje C, pero esta expresión no prueba si j está entre i y k (expresión correcta: i<j&&j<k), porque el operador < queda combinado, entonces la expresión es equivalente a (i<j)<k. En otras palabras, primero verifica si i es menor que j y luego usa el resultado de la comparación (1 o 0) para compararlo con k.
*4. Nota: "Igual" son dos = adyacentes, no uno =. Vale la pena señalar que los operadores == y != tienen menor precedencia que los operadores relacionales mayor que menor.

Como se muestra en la imagen

3. Operadores lógicos (!, &&, ||)

·1.! , &&, || son respectivamente NOT lógico, AND lógico y OR lógico (donde! es un operador unario, &&, || son operadores binarios). El resultado producido por los operadores lógicos es 0 o 1, y cualquier valor distinto de cero se opera. Los números se tratan como valores verdaderos y cualquier valor cero se trata como un valor falso. Las reglas son las siguientes:
· 2. Si el valor de la expresión es 0, entonces! El resultado de la expresión es 1;
· 3. Si los valores de la expresión 1 y la expresión 2 son distintos de cero, entonces el resultado de la expresión 1 y la expresión 2 es 1;
· 4. Si el valor de la expresión 1 o la expresión 2 Si cualquiera de los valores es (o es) distinto de cero, entonces la expresión 1 || expresión 2 se evalúa como 1.
*5. Los operadores && y || realizan cálculos de "cortocircuito" en los operandos. El valor l se calcula primero y luego el valor r. Si el valor de la expresión solo se puede derivar del valor del operando izquierdo , no es necesario calcular el valor correcto, por ejemplo: (i != 0) && (i/j> 0), si i no es igual a cero, se calcula el rvalue. Si i es igual a cero , no es necesario calcular
el operador *6 . Es asociativo por la derecha, && y || son asociativos por la izquierda.

Como se muestra en la imagen

4. Operadores de asignación (=, +=, -=, *=, /=, %=, &=, |=, ^=, >>=, <<=)

·1. Expresión a=b (b puede ser una constante, una variable o una expresión más compleja); si los tipos de a y b son diferentes, entonces el valor de b se convertirá al tipo de a cuando se produzca la operación de asignación. .
Por ejemplo: int i = 0;
i = 6.66f //i es 6 en este momento.
·2. El operador de asignación puede concatenar múltiples asignaciones, por ejemplo: i = j = k = 0;
·3. El operador = es asociativo derecho, por lo que la expresión anterior es equivalente a i = (j = (k = 0)) ;
·4. El operador de asignación requiere que su operando izquierdo sea un valor l . El valor l representa un objeto, no una constante o el resultado de un cálculo. La variable es un valor l, y expresiones como 10 o 2*i no son valores l. .
·5.Asignación compuesta: i += 2, equivalente a i = i + 2;

5. Operadores de operación de bits (<<, >>, ~, &, ^, |)

·1. Los operadores de desplazamiento incluyen desplazamiento a la izquierda (<<) y desplazamiento a la derecha (>>), que pueden desplazar los bits binarios de un número entero hacia la izquierda o hacia la derecha. Sus operandos pueden ser cualquier tipo de entero (incluido char), el operador de desplazamiento realiza promoción de enteros en ambos operandos, y el tipo de valor de retorno es el tipo promocionado del operando izquierdo.
·2. El valor de i << j es el resultado de desplazar los bits binarios en i hacia la izquierda en j bits. Cada vez que se desborda un bit desde el extremo izquierdo de i, se agrega un bit 0 al extremo derecho de i; i >> j El valor es el resultado de desplazar los bits binarios en i a la derecha en j bits.
·3. Cabe señalar que el operador de desplazamiento a la derecha se divide en dos tipos: desplazamiento aritmético a la derecha y desplazamiento lógico a la derecha. Desplazamiento aritmético a la derecha: descarte el lado derecho y complete el bit de signo original a la izquierda. Si el bit de signo original es 0, rellénelo con 0, y si es 1, rellénelo. 1; Desplazamiento lógico a la derecha: descarta el lado derecho y suma directamente 0 al lado izquierdo. ·4. El operador de desplazamiento tiene menor prioridad que el operador
aritmético .i << 2+1 es equivalente a i << (2+1)
· 5.~, &, ^, | son negación bit a bit, AND bit a bit, XOR bit a bit y OR bit a bit respectivamente. Entre ellos, ~ es un operador unario y los demás son operadores binarios. ~ consiste en invertir cada bit del operando, es decir, reemplazar cada 1 con un 0 y reemplazar un 0 con un 1; & realiza lógica en los bits correspondientes. de los dos operandos. De manera similar a las operaciones, los operadores ^ y | realizan operaciones lógicas OR en dos operandos. La diferencia es que cuando ambos operandos son 1, ^ produce 0 y | produce 1.

Como se muestra en la imagen
Como se muestra en la imagen

6. Operadores de incremento y decremento (++, - -)

·Los operadores "Auto-incremento" (sumar 1) "Auto-decremento" (resta 1), ++, - - se pueden utilizar como prefijos (++i, - -i) o como sufijos (i++, i- -) , el prefijo se incrementa en 1 antes de su uso y el sufijo se incrementa en 1 después de su uso.

    int i = 1;
	printf("i is %d\n", ++i);
	printf("i is %d\n", i);
	int j = 1;
	printf("j is %d\n", j++);
	printf("j is %d\n", j);

resultado de la operación

7. Operador condicional (?:)

· Expresión condicional: expresión 1 ? Expresión 2 : Expresión 3 , que es el único operador ternario en lenguaje C. Esta expresión se puede interpretar como: si la expresión 1 es verdadera, entonces se ejecuta la expresión 2 , en caso contrario se ejecuta la expresión 3 .
* Nota: Los operadores condicionales tienen menor prioridad que todos los demás operadores, excepto los operadores de asignación.

8. Operador de coma (,,)

·1.Expresión de coma: expresión 1 , expresión 2 , el valor de la expresión de coma debe realizarse en dos pasos. El primer paso es calcular el valor de la expresión 1. El segundo paso es calcular el valor de la expresión 2. Ponga esto value como el valor de toda la expresión.
·2. Cabe señalar que el valor de la expresión 1 no se descarta por completo. Si el resultado de la expresión 1 tiene un impacto en la expresión 2, entonces su valor aún funciona, pero el valor final es el valor de la expresión 2.

9. Operadores de puntero (&, *)

·1. Si desea encontrar la dirección de una variable, puede utilizar & (operador de dirección). Si x es una variable, entonces &x es la dirección de x en la memoria. Para obtener acceso al objeto señalado por el puntero, puede utilizar * (operador de direccionamiento indirecto). Si p es un puntero, *p representa el objeto actualmente señalado por p.
· 2. Al inicializar una variable de puntero, utilice el operador & para asignarle la dirección de una variable. Por ejemplo:

    int i,j, * p;//方法一
	p = &i;
	int* pa = &j;//方法二

· Una vez que la variable puntero apunta al objeto, puedes usar el operador * para acceder al contenido almacenado en el objeto. Por ejemplo, si p apunta a i, entonces se puede mostrar el valor de i, por ejemplo:

printf("%d\n", *p)

10. Operador para encontrar el número de bytes (operador sizeof)

·1.expresión sizeof: sizeof ( nombre del tipo ), el operador sizeof permite al programa obtener el espacio requerido para almacenar el valor del tipo especificado. Su valor es un entero sin signo, que representa el número de bytes necesarios para almacenar el valor perteneciente al nombre del tipo ... La expresión sizeof(char) se evalúa como 1 y el propio compilador normalmente puede determinar el valor de la expresión sizeof.
· 2. Al mostrar el valor sizeof, tenga en cuenta que el tipo de expresión sizeof es size_t, y size_t debe ser un entero sin signo. En C99, printf puede mostrar directamente el tipo de valor de size_t sin necesidad de conversión forzada.

printf("Size of int:%zd", sizeof(int));//输出:Size of int:4

11. Operador de conversión de tipo forzado ((nombre de tipo))

· El lenguaje C trata ( nombre de tipo ) como un operador unario. La prioridad de los operadores unarios es mayor que la de los operadores binarios. (unsigned int) tiempo (NULL), (unsigned int) es una conversión de tipo forzada.

12. Operadores especiales ([ ], -->, ., ())

·1.[] es el operador de índice de subíndice de matriz, que puede obtener elementos individuales en la matriz. El operador en la siguiente tabla requiere dos operandos, un operando es el nombre de la matriz y el otro es un número entero.
·2.——>operador y operador .se utilizan a menudo cuando las estructuras acceden a variables miembro. Cuando la dirección del objeto b se pasa a la función Imprimir, el puntero de estructura se usa para recibirla cuando se implementa la función de impresión, y --> se usa para apuntar a la variable miembro al imprimir. Cuando no se ingresa ninguna dirección, también puede utilizar directamente el operador de acceso de miembros para acceder.
·3.Nombre de la función (lista de parámetros formal), que requiere al menos 1 operando. El nombre de la función y la lista de parámetros se pueden configurar según las necesidades del usuario.

struct Student
{
    
    
	char name[20];
	int age;
};
void Print(struct Student* pb)
{
    
    
	printf("%s %d\n", pb->name, pb->age);
}
int main()
{
    
    
	struct Student b = {
    
    "小明", 20};
	printf("%s %d\n", b.name, b.age);
	Print(&b);
	return 0;
}

13. Adjunto: Tabla de prioridad de operadores

Insertar descripción de la imagen aquí
¡Gracias amigos por leer y pueden dejar un mensaje en el área de comentarios ~! ! !
Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_74475605/article/details/131977460
Recomendado
Clasificación