English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Un operador es un símbolo que le indica al compilador ejecutar una operación matemática o lógica específica. El lenguaje C tiene una rica colección de operadores y proporciona los siguientes tipos de operadores:
operadores aritméticos
operadores de relación
Operadores lógicos
Operadores de bits
Operadores de asignación
Operadoresmisceláneos
Este capítulo presentará uno por uno los operadores aritméticos, operadores de relación, operadores lógicos, operadores de bits, operadores de asignación y otros operadores.
La tabla a continuación muestra todos los operadores aritméticos soportados por el lenguaje C. Supongamos que la variable A el valor es 10Variable B el valor es 20, entonces:
operadores | Descripción | Ejemplo |
---|---|---|
+ | Sumar los dos operandos | A + B será 30 |
- | Restar el segundo operando del primer operando | A - B será -10 |
* | Multiplicar los dos operandos | A * B será 200 |
/ | El numerador dividido por el denominador | B / A será 2 |
% | Operador de módulo, el residuo de la división entera | B % A dará 0 |
++ | Operador de incremento, el valor entero se incrementa 1 | A++ Se obtendrá 11 |
-- | Operador de decremento, el valor entero se reduce 1 | A-- Se obtendrá 9 |
Vea el siguiente ejemplo para entender todos los operadores aritméticos disponibles en el lenguaje C:
#include <stdio.h> int main() { int a = 21; int b = 10; int c; c = a + b; printf("Línea 1 - c = a >> c = a - b; printf("Línea 2 - c = a >> c = a * b; printf("Línea 3 - c = a >> c = a / b; printf("Línea 4 - c = a >> c = a % b; printf("Línea 5 - c = a >> c = a++; // sumar después de asignar 1 ,c es 21,a es 22 printf("Línea 6 - c = a >> c = a--; // restar después de asignar 1 ,c es 22 ,a es 21 printf("Línea 7 - c = a >> }
Cuando el código superior se compila y ejecuta, producirá los siguientes resultados:
Línea 1 - El valor de c es 31 Línea 2 - El valor de c es 11 Línea 3 - El valor de c es 210 Línea 4 - El valor de c es 2 Línea 5 - El valor de c es 1 Línea 6 - El valor de c es 21 Línea 7 - El valor de c es 22
El siguiente ejemplo muestra a++ y ++La diferencia entre a:
#include <stdio.h> int main() { int c; int a = 10; c = a++; printf("Primero asignar y luego operar:\n"); printf("Línea 1 - c = a >> printf("Línea 2 - el valor de a es %d\n", a); a = 10; c = a--; printf("Línea 3 - c = a >> printf("Línea 4 - el valor de a es %d\n", a); printf("Primero operar y luego asignar:\n"); a = 10; c = ++a; printf("Línea 5 - c = a >> printf("Línea 6 - el valor de a es %d\n", a); a = 10; c = --a; printf("Línea 7 - c = a >> printf("Línea 8 - el valor de a es %d\n", a); }
El resultado de la ejecución del programa anterior es:
Primero asignar y luego operar: Línea 1 - El valor de c es 10 Línea 2 - el valor de a es 11 Línea 3 - El valor de c es 10 Línea 4 - el valor de a es 9 Primero operar y luego asignar: Línea 5 - El valor de c es 11 Línea 6 - el valor de a es 11 Línea 7 - El valor de c es 9 Línea 8 - el valor de a es 9
La tabla a continuación muestra todos los operadores de relación soportados por el lenguaje C. Supongamos que la variable A el valor es 10Variable B el valor es 20, entonces:
operadores | Descripción | Ejemplo |
---|---|---|
== | Verifica si los valores de los operandos son iguales, y si lo son, la condición es verdadera. | (A == B) es falso. |
!= | Verifica si los valores de los operandos son iguales, y si no lo son, la condición es verdadera. | (A != B) es verdadero. |
> | Verifica si el valor del operando izquierdo es mayor que el valor del operando derecho, y si es así, la condición es verdadera. | (A > B) es falso. |
< | Verifica si el valor del operando izquierdo es menor que el valor del operando derecho, y si es así, la condición es verdadera. | (A < B) es verdadero. |
>= | Verifica si el valor del operando izquierdo es mayor o igual que el valor del operando derecho, y si es así, la condición es verdadera. | (A >= B) es falso. |
<= | Verifica si el valor del operando izquierdo es menor o igual que el valor del operando derecho, y si es así, la condición es verdadera. | (A <= B) es verdadero. |
Vea el siguiente ejemplo para comprender todos los operadores de relación disponibles en el lenguaje C:
#include <stdio.h> int main() { int a = 21; int b = 10; int c; if( a == b ) { printf("Línea 1 - a es igual que b " ); } else { printf("Línea 1 - a no es igual que b " ); } if ( a < b ) { printf("Línea 2 - a es menor que b " ); } else { printf("Línea 2 - a no es mayor o igual que b " ); } if ( a > b ) { printf("Línea 3 - a es mayor que b " ); } else { printf("Línea 3 - a no es mayor o igual que b " ); } /* Cambiar los valores de a y b */ a = 5; b = 20; if ( a <= b ) { printf("Línea 4 - a es menor o igual que b " ); } if ( b >= a ) { printf("Línea 5 - b es mayor o igual que a " ); } }
Cuando el código superior se compila y ejecuta, producirá los siguientes resultados:
Línea 1 - a no es igual que b Línea 2 - a no es menor o igual que b Línea 3 - a es mayor que b Línea 4 - a es menor o igual que b Línea 5 - b es mayor o igual que a
La siguiente tabla muestra todos los operadores lógicos de relación admitidos por el lenguaje C. Supongamos la variable A el valor es 1Variable B El valor es 0, entonces:
operadores | Descripción | Ejemplo |
---|---|---|
&& | Se llama operador lógico y. Si ambos operandos no son cero, la condición es verdadera. | (A && B) es falso. |
|| | Se llama operador lógico o. Si cualquier uno de los operandos no es cero, la condición es verdadera. | (A || B) es verdadero. |
! | Se llama operador lógico de no. Se utiliza para invertir el estado lógico del operando. Si la condición es verdadera, el operador lógico de no lo convertirá en falso. | !(A && B) es verdadero. |
Vea el siguiente ejemplo para comprender todos los operadores lógicos disponibles en el lenguaje C:
#include <stdio.h> int main() { int a = 5; int b = 20; int c; if ( a && b ) { printf("Línea 1 - Condición verdadera " ); } if ( a || b ) { printf("Línea 2 - Condición verdadera " ); } /* Cambiar los valores de a y b */ a = 0; b = 10; if ( a && b ) { printf("Línea 3 - Condición verdadera " ); } else { printf("Línea 3 - Condición falsa " ); } if ( !(a && b) ) { printf("Línea 4 - Condición verdadera " ); } }
Cuando el código superior se compila y ejecuta, producirá los siguientes resultados:
Línea 1 - Condición verdadera Línea 2 - Condición verdadera Línea 3 - Condición falsa Línea 4 - Condición verdadera
Los operadores de bits actúan sobre los bits, ejecutando la operación bit a bit. La tabla de valores verdaderos de &、 | y ^ se muestra a continuación:
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
Supongamos que A = 60, y B = 13representados en formato binario, se muestran como sigue:
A = 0011 1100
B = 0000 1101
-----------------
A & B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A = 1100 0011
La siguiente tabla muestra los operadores de bits admitidos por el lenguaje C. Supongamos que la variable A el valor es 60, variable B el valor es 13entonces:
operadores | Descripción | Ejemplo |
---|---|---|
& | Operación de AND lógico, realiza una operación de "AND" de bits. Reglas de operación: 0 & 0 = 0; 0 &1=0; 1&0 = 0; 1&1=1; | (A & B) se obtendrá 12es, es decir, 0000 1100 |
| | Operador de OR lógico, realiza una operación de "OR" de bits. Reglas de operación: 0 | 0 = 0; 0 |1=1; 1|0 =1; 1|1=1; | (A | B) se obtendrá 61es, es decir, 0011 1101 |
^ | Operador de XOR, realiza una operación de "XOR" de bits. Reglas de operación: 0 ^ 0 = 0; 0 ^1=1; 1^0 =1; 1^1=0; | (A ^ B) se obtendrá 49es, es decir, 0011 0001 |
~ | Operador de inversión, realiza una operación de "inversión" de bits. Reglas de operación: ~1=0; ~0 =1; | (~A) se obtendrá -61es, es decir 1100 0011es, es decir, el código de complemento de dos del número binario con signo |
<< | Operador de desplazamiento a la izquierda en binario. Desplaza todos los bits de un objeto de operación un número determinado de posiciones a la izquierda (se descartan los bits de la izquierda y se rellenan con 0 en la derecha). | A << 2 Se obtendrá 240, es decir 1111 0000 |
>> | Operador de desplazamiento a la derecha en binario. Desplaza todos los bits de un número un número determinado de posiciones a la derecha, los números positivos se rellenan con 0, y los números negativos se rellenan con1se descartan los bits de la derecha. | A >> 2 Se obtendrá 15es, es decir, 0000 1111 |
Vea el siguiente ejemplo para comprender todos los operadores de bits disponibles en el lenguaje C:
#include <stdio.h> int main() { unsigned int a = 60; /* 60 = 0011 1100 */ unsigned int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a & b; /* 12 = 0000 1100 */ printf("Línea 1 - c = a >> c = a | b; /* 61 = 0011 1101 */ printf("Línea 2 - c = a >> c = a ^ b; /* 49 = 0011 0001 */ printf("Línea 3 - c = a >> c = ~a; /*-61 = 1100 0011 */ printf("Línea 4 - c = a >> c = a << 2; /* 240 = 00 1111 0000 */ printf("Línea 5 - c = a >> c = a >> 2; /* 15 = 0000 1111 */ printf("Línea 6 - c = a >> }
Cuando el código superior se compila y ejecuta, producirá los siguientes resultados:
Línea 1 - El valor de c es 12 Línea 2 - El valor de c es 61 Línea 3 - El valor de c es 49 Línea 4 - El valor de c es -61 Línea 5 - El valor de c es 240 Línea 6 - El valor de c es 15
La siguiente tabla enumera los operadores de asignación admitidos por el lenguaje C:
operadores | Descripción | Ejemplo |
---|---|---|
= | Operador de asignación simple, asigna el valor del operando derecho al operando izquierdo | C = A + B asignará A + El valor de B se asigna a C |
+= | Operador de suma y asignación, asigna el resultado de sumar el operando derecho al operando izquierdo al operando izquierdo | C += A es equivalente a C = C + A |
-= | Operador de resta y asignación, asigna el resultado de restar el operando derecho del operando izquierdo al operando izquierdo | C -= A es equivalente a C = C - A |
*= | Operador de multiplicación y asignación, asigna el resultado de multiplicar el operando derecho por el operando izquierdo al operando izquierdo | C *= A es equivalente a C = C * A |
/= | Operador de división y asignación, asigna el resultado de dividir el operando izquierdo por el operando derecho al operando izquierdo | C /= A es equivalente a C = C / A |
%= | Operador de módulo y asignación, asigna el módulo de los dos operandos a la izquierda del operando | C %= A es equivalente a C = C % A |
<<= | Operador de asignación de desplazamiento a la izquierda | C <<= 2 Es equivalente C = C << 2 |
>>= | Operador de asignación de desplazamiento a la derecha | C >>= 2 Es equivalente C = C >> 2 |
&= | Operador de asignación de AND bit a bit | C &= 2 Es equivalente C = C & 2 |
^= | Operador de asignación de XOR bit a bit | C ^= 2 Es equivalente C = C ^ 2 |
|= | Operador de asignación de OR bit a bit | C |= 2 Es equivalente C = C | 2 |
Vea el siguiente ejemplo para comprender todos los operadores de asignación disponibles en el lenguaje C:
#include <stdio.h> main() { int a = 21; int c; c = a; printf("Línea 1 - Ejemplo de operador =, el valor de c es = %d\n", c ); c += a; printf("Línea 2 - +Ejemplo de operador =, el valor de c es = %d\n", c ); c -= a; printf("Línea 3 - -Ejemplo de operador =, el valor de c es = %d\n", c ); c *= a; printf("Línea 4 - *Ejemplo de operador =, el valor de c es = %d\n", c ); c /= a; printf("Línea 5 - /Ejemplo de operador =, el valor de c es = %d\n", c ); c = 200; c %= printf("Línea 6 - Ejemplo de operador %=, el valor de c es = %d\n", c ); c <<= 2; printf("Línea 7 - Ejemplo de operador <<=, el valor de c es = %d\n", c ); c >>= 2; printf("Línea 8 - Ejemplo de operador >=>, el valor de c es = %d\n", c ); c &= 2; printf("Línea 9 - Ejemplo de operador &=, el valor de c es = %d\n", c ); c ^= 2; printf("Línea 10 - Ejemplo de operador ^=, el valor de c es = %d\n", c ); c |= 2; printf("Línea 11 - c |=, ejemplo de operador |=, el valor de c es = %d\n", c ); }
Cuando el código superior se compila y ejecuta, producirá los siguientes resultados:
Línea 1 - Ejemplo de operador =, el valor de c es = 21 Línea 2 - +Ejemplo de operador =, el valor de c es = 42 Línea 3 - -Ejemplo de operador =, el valor de c es = 21 Línea 4 - *Ejemplo de operador =, el valor de c es = 441 Línea 5 - /Ejemplo de operador =, el valor de c es = 21 Línea 6 - Ejemplo de operador %=, el valor de c es = 11 Línea 7 - Ejemplo de operador <<=, el valor de c es = 44 Línea 8 - Ejemplo de operador >=>, el valor de c es = 11 Línea 9 - Ejemplo de operador &=, el valor de c es = 2 Línea 10 - Ejemplo de operador ^=, el valor de c es = 0 Línea 11 - Ejemplo de operador |=, el valor de c es = 2
La siguiente tabla enumera otros operadores importantes que admite el lenguaje C, incluyendo sizeof Y ? :.
operadores | Descripción | Ejemplo |
---|---|---|
sizeof() | Devolverá el tamaño de la variable. | sizeof(a) devolverá 4donde a es un entero. |
& | Devolverá la dirección de la variable. | &a; dará la dirección real de la variable. |
* | Apuntará a una variable. | *a; apuntará a una variable. |
? : | Expresión condicional | Si la condición es verdadera ? entonces el valor es X : de lo contrario el valor es Y |
Vea el siguiente ejemplo para comprender todos los operadores especiales disponibles en el lenguaje C:
#include <stdio.h> int main() { int a = 4; short b; double c; int* ptr; /* Ejemplo de operador sizeof */ printf("Línea 1 - El tamaño de la variable a es = %lu\n", sizeof(a) ); printf("Línea 2 - tamaño de la variable b = %lu\n", sizeof(b)) printf("Línea 3 - tamaño de la variable c = %lu\n", sizeof(c)); /* & y * ejemplo de operador */ ptr = &a; /* 'ptr' ahora contiene la dirección de 'a' */ printf("a valor es %d\n", a); printf("*ptr es %d\n", *ptr); /* ejemplo de operador ternario */ a = 10; b = (a == 1) ? 20: 30; printf("b valor es %d\n", b); b = (a == 10) ? 20: 30; printf("b valor es %d\n", b); }
Cuando el código superior se compila y ejecuta, producirá los siguientes resultados:
Línea 1 - tamaño de la variable a = 4 Línea 2 - tamaño de la variable b = 2 Línea 3 - tamaño de la variable c = 8 el valor de a es 4 *ptr es 4 el valor de b es 30 el valor de b es 20
La prioridad de los operadores determina la combinación de los elementos en una expresión. Esto afecta a cómo se calcula una expresión. Algunos operadores tienen una prioridad más alta que otros, por ejemplo, los operadores de multiplicación y división tienen una prioridad más alta que los de adición y sustracción.
por ejemplo x = 7 + 3 * 2aquí, x se asigna el valor de 13, en lugar de 20, porque el operador * más alta prioridad + prioridad más alta, por lo que primero se calcula la multiplicación 3*2luego además de 7.
La siguiente tabla muestra los operadores en orden de prioridad desde la más alta a la más baja. Los operadores de mayor prioridad se muestran en la parte superior de la tabla, y los de menor prioridad en la parte inferior. En una expresión, los operadores de mayor prioridad se calculan primero.
categoría | operadores | asociatividad |
---|---|---|
sufijo | () [] -> . ++ - - | De izquierda a derecha |
unario | + - ! ~ ++ - - (type)* & sizeof | De derecha a izquierda |
multiplicación y división | * / % | De izquierda a derecha |
adición y sustracción | + - | De izquierda a derecha |
desplazamiento | << >> | De izquierda a derecha |
relación | < <= > >= | De izquierda a derecha |
igual | == != | De izquierda a derecha |
y bit AND | & | De izquierda a derecha |
xor bit XOR | ^ | De izquierda a derecha |
o bit OR | | | De izquierda a derecha |
y lógico AND | && | De izquierda a derecha |
o lógico OR | || | De izquierda a derecha |
condicional | ?: | De derecha a izquierda |
asignación | = += -= *= /= %=>>= <<= &= ^= |= | De derecha a izquierda |
coma | , | De izquierda a derecha |
Vea el siguiente ejemplo para entender la prioridad de los operadores en el lenguaje C:
#include <stdio.h> main() { int a = 20; int b = 10; int c = 15; int d = 5; int e; e = (a + b) * c / d; // ( 30 * 15 ) / 5 printf("(a + b) * c / d valor es %d\n", e); e = ((a + b) * c) / d; // (30 * 15 ) / 5 printf("((a + b) * c) / d valor es %d\n", e); e = (a + b) * (c / d); // (30) * (15/5) printf("(a + b) * (c / d) valor es %d\n", e); e = a + (b * c) / d; // 20 + (150/5) printf("a + (b * c) / d valor es %d\n", e); return 0; }
Cuando el código superior se compila y ejecuta, producirá los siguientes resultados:
(a + b) * c / d valor es 90 ((a + b) * c) / d valor es 90 (a + b) * (c / d) valor es 90 a + (b * c) / d valor es 50