Los dos juegos anteriores han sido escritos, así que continuemos nuestro estudio del conocimiento relacionado con el lenguaje C. A continuación, este artículo presentará algunos operadores en lenguaje C. Aunque estos operadores son "discretos", son de gran utilidad. Aprenderlos bien es lo que debemos hacer, así que no hablemos tonterías, comencemos el estudio de hoy.
contenido
2.1 Operador de desplazamiento a la izquierda
2.2 Operador de turno a la derecha
4.1 Operadores de asignación compuesta
10. Referencias a subíndices, llamadas a funciones y miembros de estructura
11.1 Conversiones de tipos implícitas
11.3 Atributos de los Operadores
clasificación del operador
Los operadores incluyen:
- operadores aritméticos
- operador de turno
- operador bit a bit
- operador de asignación
- operador unario
- operador relacional
- operador lógico
- operador condicional
- expresión de coma
- Referencias a subíndices, llamadas a funciones y miembros de estructura
1. Operadores aritméticos
+ - * / %
Los operadores aritméticos incluyen los anteriores: suma, resta, multiplicación, división y resto.
Entre estos operadores, no hay nada que decir sobre la suma, la resta y la multiplicación. Es lo mismo que la aritmética normal, pero aquí se debe prestar atención a la división. ¿Sigue siendo la división original?
Según la aritmética normal, el resultado de dividir 2 entre 3 debería ser un bucle de 0,6 6, pero ¿es realmente así?
El resultado final es 0, alguien dirá, este resultado debe ser un número de coma flotante, luego reemplace %d con %f y echemos un vistazo al resultado.
Desafortunadamente, este no es el 0.666666 deseado, entonces, ¿por qué? Debido a que las dos variables a y b son números enteros, aquí se realiza la operación con números enteros. ¿Qué sucede si solo desea imprimir un número de punto flotante? Aquí solo necesita convertir cualquier número en ambos lados del operador a un número de coma flotante. En resumen, debe haber un número de coma flotante a la izquierda y a la derecha.
Hay otra forma de escribir:
Aunque la impresión aquí no es lo que queremos, es porque la precisión de float no es tan alta, pero no afecta, solo necesitamos saber usar este operador para evitar algunos errores.
Movámonos a ' / ':
El resultado debería ser 4.5, pero al final es 4. El cálculo entero aquí no se redondeará automáticamente. Combinado con el resto, se puede ver que '/' solo calcula la parte del cociente, y obtiene un número entero.
Así que para resumir:
1. Además del operador ' % ', varios otros operadores pueden actuar sobre números enteros y de coma flotante.
2. Para el operador ' / ' si ambos operandos son enteros, realice una división de enteros. Y siempre que haya números de punto flotante, se realiza la división de punto flotante.
3. Ambos operandos del operador ' % ' deben ser números enteros. Devuelve el resto después de la división.
2. Operador de turno
<< Operador de desplazamiento a la izquierda
>> Operador de desplazamiento a la derecha
Nota: El operando del operador de desplazamiento solo puede ser un número entero.A continuación, estos operadores incluirán contenido relacionado binario.
2.1 Operador de desplazamiento a la izquierda
El operador de desplazamiento no cambia el valor original de a.
¿Por qué el resultado de b aquí es 20?
2.2 Operador de turno a la derecha
Reglas de desplazamiento: en
primer lugar, hay dos tipos de operaciones de desplazamiento a la derecha:
1. Desplazamiento lógico
: rellene con 0 a la izquierda, descarte a la derecha
2. Desplazamiento aritmético
: rellene con el bit de signo del valor original a la izquierda, descartar a la derecha
Nota: Para los operadores de cambio, no cambie los bits negativos, esto no está definido por el estándar.
Tal como:numero int = 10;
número >> -1;
3. Operadores bit a bit
Los operadores de bits se dividen en:
& // por (binario) bit a bit AND
| // O por bit (binario)
^ // XOR por bits (binarios)
Nota: sus operandos deben ser números enteros.
& bit a bit Y
| Bit a bit Y
^ XOR bit a bit
También es posible intercambiar dos variables sin variables intermedias usando operadores:
De esta forma, a y b se intercambian.
4. Operador de asignación
Asignación, como su nombre indica, es dar un valor
int a = 10;
a = 2;
El "=" aquí no es igual a aritmética, significa asignación.
4.1 Operadores de asignación compuesta
+=
-=
*=
/=
%=
>>=
<<=
&=
|=
^
Por ejemplo: +=
x = x + 10, es equivalente a x += 10;
5. Operador unario
! operador lógico inverso
- valor negativo
+ valor positivo
& obtener dirección
tamaño del tipo de operando longitud en bytes
~ Invertir el bit a bit binario de un número
-- Delantero trasero--
++ antes, después ++
* Operador de acceso indirecto (operador de desreferencia)
(escriba el nombre) elenco
Vamos a presentarlo aquí, y podemos explicarlo más adelante cuando lo usemos, para que el efecto sea mejor.
6. Operadores relacionales
>
>=
<
<=
!= para "no igual"
== para "igual"
Aquí hay que prestar atención al uso de "==" y "=".
7. Operadores Lógicos
&& AND lógico
|| lógico o
Esto es para distinguir entre estos dos y la diferencia entre los operadores de bits, aquí hay dos.
int main()
{
int i = 0,a=0,b=2,c =3,d=4;
i = a++ && ++b && d++;
//i = a++||++b||d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
return 0;
}
Veamos el ejemplo de Y lógico ¿Cuál es el resultado de la impresión?
Algunas personas pueden pensar que el resultado es incorrecto, pero este es el resultado correcto, entonces, ¿por qué?
El uso de && lógico y es de izquierda a derecha, y cada expresión debe ser verdadera para calcular hasta el final, de lo contrario será como aquí, post ++ se usa primero más 1, por lo que al principio a = 0, el expresión es falsa, por lo que la expresión después de a no se evaluará.
|| La regla de uso del OR lógico es que mientras una expresión sea verdadera en la expresión, no se calculará más. Al principio, a es falsa y la siguiente b es verdadera, por lo que la siguiente d no será calculado.
8. Operador condicional
También llamado operador ternario
exp1 ? exp2 : exp3
a > b ? un : b;
Conviértelo:
si (a > b)
(ejecutar a si a > b)
demás
(de lo contrario haz b)
9. Expresión de coma
(exp1, exp2, exp3, …expN)
Expresiones de coma, ejecutadas en orden de izquierda a derecha. El resultado de toda la expresión es el resultado de la última expresión.
int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);
El resultado final c es 13
10. Referencias a subíndices, llamadas a funciones y miembros de estructura
1. [ ] Operador de referencia de
subíndice Operando: un nombre de matriz + un valor de índice
2. ( ) El operador de llamada de función
acepta uno o más operandos: el primer operando es el nombre de la función y los operandos restantes son los parámetros pasados a la función
3. Acceder a un miembro de una estructura
.struct.membername
-> Puntero de estructura -> nombre de miembro
11. Evaluación de expresión
El orden en que se evalúan las expresiones está determinado en parte por la precedencia y la asociatividad de los operadores.
Asimismo, es posible que sea necesario convertir los operandos de algunas expresiones a otros tipos durante la evaluación.
11.1 Conversiones de tipos implícitas
Las operaciones aritméticas de enteros C siempre se realizan con al menos la precisión del tipo de entero predeterminado.
Para lograr esta precisión, los caracteres y los operandos cortos en las expresiones se convierten en enteros ordinarios antes de su uso, una conversión denominada promoción de enteros.
Ejemplo:
carácter a, b, c; a = b + c;
Los valores de b y c se convierten en enteros ordinarios y luego se realiza la operación de suma. Una vez completada la operación de suma, el resultado se trunca y se almacena en a.
//La promoción entera de números negativos
char c1 = -1;
solo hay 8 bits en el bit binario (complemento) de la variable c1:
1111111
Como char es un char con signo
, cuando se promociona el entero, el suplemento de orden superior el bit de signo es 1
El resultado después de impulsar es: Complemento: 111111111111111111111111111111111//Carácter de promoción de entero positivo
c2 = 1;
solo hay 8 bits en el bit binario (complemento) de la variable c2:
00000001
Debido a que char es un char con signo
, cuando se promueve el entero, el bit de signo complementario de orden superior es 0
El resultado después de impulsar es:
000000000000000000000000000000001// Promoción de enteros sin signo, relleno de orden alto con 0
11.2 Conversiones aritméticas
Si los operandos de un operador son de diferentes tipos, la operación no puede continuar a menos que uno de los operandos se convierta al tipo del otro. La siguiente jerarquía se llama transformaciones aritméticas ordinarias .
alto nivel largo doble
doble
flotante
unsigned long int
long int
unsigned int bajo nivel int
Si el tipo de un operando es más bajo en la lista anterior, la operación se realiza primero mediante la conversión al tipo del otro operando.
Advertencia:
Pero las conversiones aritméticas deben ser razonables, de lo contrario habrá algunos problemas potenciales y puede haber una pérdida de precisión.
11.3 Atributos de los Operadores
Hay tres factores que influyen en la evaluación de expresiones complejas.
1. La prioridad del operador
2. La asociatividad del operador
3. Si controlar el orden de evaluación.
¿Cuál de los dos operadores adyacentes se ejecuta primero? dependiendo de su prioridad. Si ambos tienen la misma prioridad, depende de su asociatividad.
Conclusión:
Después de que termine el año, sigamos estudiando mucho.