Lenguaje C preliminar - 4. Explicación detallada de los operadores

        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

clasificación del operador

1. Operadores aritméticos

2. Operador de turno

        2.1 Operador de desplazamiento a la izquierda

         2.2 Operador de turno a la derecha

3. Operadores bit a bit

4. Operador de asignación

        4.1 Operadores de asignación compuesta

5. Operador unario

6. Operadores relacionales

7. Operadores Lógicos

8. Operador condicional

9. Expresión de coma

10. Referencias a subíndices, llamadas a funciones y miembros de estructura

11. Evaluación de expresión

        11.1 Conversiones de tipos implícitas

        11.2 Conversiones aritméticas

        11.3 Atributos de los Operadores

 Conclusión:


clasificación del operador

Los operadores incluyen:

  1. operadores aritméticos
  2. operador de turno
  3. operador bit a bit
  4. operador de asignación
  5. operador unario
  6. operador relacional
  7. operador lógico
  8. operador condicional
  9. expresión de coma
  10. 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.

Supongo que te gusta

Origin blog.csdn.net/m0_64607843/article/details/122665466
Recomendado
Clasificación