[Lenguaje C] Tipo de datos Conversión de tipo de datos Operadores y expresiones de variable constante (resumen de conocimientos)

1. tipo de datos

Mapa mental de tipos de datos

1. Conversión de tipo de datos

(1) Conversión de tipo automática

Cuando se operan diferentes tipos de datos juntos, el sistema de compilación realizará automáticamente la conversión de tipos . Las reglas para la conversión automática son:

Convierta el tipo (de bajo nivel) que ocupa menos espacio de memoria al tipo (de alto nivel) que ocupa más espacio para garantizar la precisión de la operación.

Como se muestra en la imagen:
Reglas de conversión automática de tipos de datos

  • Las flechas horizontales en la figura representan ciertas conversiones. Por ejemplo, los datos de tipo char y de tipo corto deben convertirse primero al tipo int. Los datos de tipo flotante se convertirán primero al tipo doble durante la operación para mejorar la precisión del cálculo (incluso si hay dos tipos flotantes). se agregan datos), también deben convertirse a tipo doble y luego agregarse)
  • Las flechas verticales en la figura indican el método de conversión cuando los tipos de datos utilizados para las operaciones aún son diferentes después de la conversión horizontal. Durante el proceso de conversión de diferentes tipos de datos, la secuencia de conversión de tipos no es una conversión paso a paso en la dirección de la flecha y no hay necesidad de una conversión de tipos intermedia . Por ejemplo, para realizar operaciones con datos de tipo int y tipo doble, primero convierta los datos de tipo int directamente en tipo doble y luego realice operaciones con dos datos del mismo tipo (tipo doble).
  • La conversión solo afecta el tipo de resultado de la operación de la expresión y no cambia el tipo de definición de la variable original, y su valor de datos no cambiará de ninguna manera.
  • Cuando los tipos de operandos en ambos lados del operador de asignación son diferentes, también se produce la conversión de tipos. La regla de conversión es: convertir el tipo de expresión en el lado derecho del operador de asignación al tipo de variable en la izquierda .

(2) Conversión de tipo forzada

(especificador de tipo) (expresión)

  • Función : fuerza el resultado de una expresión en el tipo especificado por el especificador de tipo.
    Por ejemplo:

    #include<stdio.h>
    int main()
    {
          
          
    	int a=3,b=4;
    	float c;
    	c=(float)(a+b)/2;//将int型 7 强制转换为float型 7.0
    	printf("c=%f\n",c);
    	return 0;
    }
    

2. Constantes

Mapa mental constante

1. Constante directa

(1) Constante entera

Es decir, números enteros, incluidos los enteros positivos, los enteros negativos y el cero.

a. Representación decimal
  • Consta de signos positivos y negativos y números del 0 al 9, ejemplo -123
B. Representación octal
  • Compuesto por el número 0 (prefijo) y los números 0~7, ejemplo 045
  • Generalmente un entero sin signo
C. Representación hexadecimal:
  • Consta del prefijo 0x o 0X y los números 0~9 o letras A~F (que representan 10~15, tanto en mayúsculas como en minúsculas), por ejemplo 0x12cD
  • Generalmente un entero sin signo

(2) Constantes reales

  • Es decir, los números reales, también conocidos como números de coma flotante, solo se pueden expresar en decimal en lenguaje C.
  • Las constantes reales utilizan de forma predeterminada números reales de tipo doble. Si se agrega f o F (como 1.23f) después del número, se considera un número real de tipo flotante.
a.Expresado en forma decimal
  • Consta de parte entera, punto decimal y parte decimal, Ejemplo-12.34;
  • Cuando la parte entera o decimal es 0, se puede omitir, pero no se puede omitir el punto decimal y debe haber números en al menos un lado antes y después del punto decimal, Ejemplo 12. y -.123
b.Expresado en forma exponencial
  • Consta de la parte mantisa, la letra e o E y la parte exponente. El formato es: ±mantisa E (e) exponente, por ejemplo -1.2E-2, que significa -1.2 x (10) -2 ; 1.2e2 , lo que significa 1,2 x (10) 2

  • Debe haber números antes y después de la letra E (o e) y la parte exponente solo puede ser un número entero

(3) Carácter constante

Un solo carácter encerrado entre comillas simples, como 'A'

  • Puede ser cualquier carácter del juego de caracteres ASCII (es decir, puede participar en operaciones como números enteros)
  • Cada carácter ocupa un byte en la memoria.
  • El carácter de escape sólo ocupa un byte en la memoria.

(4) Constante de cadena

Una secuencia de cero o más caracteres entre comillas dobles, como "He MengYuan"

  • Se pueden utilizar caracteres de espacio, caracteres de escape, caracteres nulos y otros caracteres en las cadenas, así como caracteres de texto como los caracteres chinos.
  • Las constantes de cadena ocupan una unidad de almacenamiento continua en la memoria.
  • El sistema agrega automáticamente la marca de final ' \0 ' después de cada cadena , por lo que una cadena de n caracteres ocupa n+1 bytes de espacio.
  • Puede utilizar el operador sizeof (ver 4) para calcular el espacio de memoria ocupado por una cadena.
  • Puede utilizar la función strlen() para calcular la longitud de la cadena.

2. Constantes simbólicas

En lenguaje C, se puede utilizar un identificador para representar una constante, llamada constante simbólica. Las constantes simbólicas deben definirse antes de su uso. La forma general es:

#define 标识符 常量值 //#define 宏定义命令
例如:#define PI 3.14
//在需要3.14时使用PI就可以

3. Variables

Mapa mental variable

1. Variables de carácter

char c1,c2;
  • Tiene características numéricas y puede participar en operaciones como números enteros.
  • Se permite asignar valores de caracteres a variables enteras y también se permite asignar valores enteros a variables de caracteres.
  • Se permite generar variables de caracteres como números enteros y también se permite generar números enteros como caracteres.

2. Variables de tipo real

Palabras clave tipo Número de bytes ocupados Rangos
flotar Tipo de precisión simple 4 3.4E-38~3.4E+38
doble tipo doble 8 1.7E-308~1.7E+308
  • Los datos de precisión simple pueden retener 7 dígitos significativos y los datos posteriores no son válidos.
  • Los datos de doble precisión pueden retener 16 dígitos significativos, pero en VS pueden retener hasta 6 dígitos decimales y el séptimo dígito decimal debe redondearse.

Por ejemplo:

#include<stdio.h>
int main()
{
    
    
	float a = 1234.567689456;
	double b = 1234.567895678;
	printf("a=%f,b=%f\n", a, b);
	return 0;
}

El resultado es:

a=1234.567749,b=1234.567896

3. variable entera

Palabras clave tipo Número de bytes ocupados Rangos
corto int Corto 2 -32768~32767(-2 15 ~2 15 -1)
En t entero 4 -2147483648~2147483647(-2 31 ~2 31 -1)
largo int Entero largo 4 -2147483648~2147483647(-2 31 ~2 31 -1)
corto sin firmar corto sin firmar 2 0~65535(0~2 16-1 )
entero sin firmar entero sin signo 4 0~4294967295(0~2 32 -1)
largo sin firmar entero largo sin signo 4 0~4294967295(0~2 32 -1)

Nota: Los datos anteriores solo se encuentran en el entorno Visual C++ 2010. El tamaño de la memoria ocupada por varios tipos de datos varía según los diferentes sistemas de compilación.

4. Operadores y expresiones

Mapa mental de operadores y expresiones.

1. Operadores de asignación y expresiones de asignación.

(1) Operador de asignación simple

signo igual =

int a,b,c=1;
//等价于 
int a=1,b=1,c=1;
//但千万不能像下面这样写
int a=b=c=1;

(2) Operador de asignación compuesta

operador Ejemplos de aplicación forma equivalente
+= a+=x a=a+(x)
-= a-=x a=a-(x)
*= a*=x a=a*(x)
/= a/=x a=a/(x)
%= un%=x a=a%(x)

(3) Expresión de asignación

variable = expresión

  • Si los tipos de los lados izquierdo y derecho de "=" son diferentes, el sistema convertirá el tipo de la derecha en el tipo de la izquierda de acuerdo con el principio de conversión de tipo de asignación.
    Por ejemplo:

    #include<stdio.h>
    int main()
    {
          
          
    	int a;
    	float b=123.456;
    	a = b;
    	printf("%d\n", a);
    	return 0;
    }
    

    El resultado es:

    123
    

2. Operadores aritméticos y expresiones aritméticas.

(1) Operadores aritméticos básicos

operador + - * / %
nombre agregar reducir llevar eliminar tomar el resto
  • / Operador de división: al calcular a/b, si a y b son ambos de tipo entero, su cociente también es de tipo entero y la parte decimal se descarta, por ejemplo 1/2=0; si a o b es un real escriba, luego tanto a como b se convierten a tipo doble y luego se dividen y el resultado es tipo doble . Por ejemplo, 1.0/2 = 0.5,
    consulte el siguiente código:

    #include<stdio.h>
    int main()
    {
          
          
    	float a;
    	a = 1 / 2*3;//计算3的一半
    	printf("%f\n", a);
    	return 0;
    }
    

    Nuestro resultado ideal debería ser:

    1.500000
    

    Pero para:

    0.000000
    

    El código correcto debería ser:

    #include<stdio.h>
    int main()
    {
          
          
    	float a;
    	a = 1.0 / 2*3;//计算3的一半
    	printf("%f\n", a);
    	return 0;
    }
    
  • % Operador de resto: El resultado es el resto después de dividir dos números. Se requiere que los dos operandos involucrados en la operación sean números enteros y el resultado también sea un número entero. Ejemplo 7%2=1; El signo de la operación de resto resultado Mismo signo que el primer operando, ejemplo 7%-2=1

(2) Operadores de incremento y decremento automático

  • Operador de incremento automático: agrega uno al valor de una variable (tome i como ejemplo a continuación)
    i++: úselo primero y luego agregue 1
    ++i: agregue 1 primero y luego úselo
    Diferencia:

    #include<stdio.h>
    int main()
    {
          
          
    	int i=1;
    	printf("i=%d\n",++i);//打印i的值
    	printf("i=%d\n",i++);//打印i的值
    	return 0;
    }
    

    resultado de la operación:

    i=2
    i=2
    
  • Operador de decremento automático: Disminuye el valor de la variable en uno
    i- -: Úselo primero y luego reste 1
    - -i: Sume 1 primero y luego úselo
    Diferencia: Similar al incremento automático

(3) Expresión aritmética

Una expresión conectada por operadores aritméticos, operandos y paréntesis. Los operandos pueden ser constantes, variables, funciones, etc.

  • Después de evaluar la expresión, se obtendrá un cierto valor y tipo. El tipo está determinado por el operador específico y el operando utilizado. Por ejemplo: hay una definición de "char a=0;int b=1;float c=2 ;doble d= 3;", entonces el valor de la expresión "a+b+c+d" es de tipo doble
  • El signo de multiplicación no se puede omitir.
  • Hay varios niveles de paréntesis disponibles y solo se pueden utilizar paréntesis

3. Operador de coma y expresión de coma.

(1) Operador de coma

La coma también es un operador y su función es conectar varias expresiones para formar una expresión, es decir, una expresión de coma.

(2) expresión de coma

expresión 1, expresión 2,…, expresión n

  • Orden de ejecución: calcule el valor de cada expresión en secuencia de izquierda a derecha y use el valor de la última expresión como el valor de toda la expresión de coma

  • No todos los lugares donde aparecen comas son expresiones de coma. A veces, las comas se utilizan simplemente como separadores de variables .
    Ejemplo de código:

    #include<stdio.h>
    int main()
    {
          
          
    	int i,j=7;
    	float k = 5;
    	i = (j = j + 2, j / k);
    	printf("i=%d\n",i);
    	return 0;
    }
    

    resultado de la operación:

    i=1
    

4. Encuentre el operador del número de bytes.

tamaño de (expresión) o tamaño de expresión
tamaño de (nombre del tipo de datos)

Ejemplo de código:

#include<stdio.h>
int main()
{
    
    
	int a, b;
	a = sizeof(3 + 5.0);
	b = sizeof 3 + 5.0;
	printf("%d,%d,%d\n", a, b, sizeof("china"));
	return 0;
}

El resultado de ejecución es:

8,9,6

En VS2022:

#include<stdio.h>
int main()
{
    
    
	printf("%d\n", sizeof(char));//1
	printf("%d\n", sizeof(float));//4
	printf("%d\n", sizeof(double));//8
	printf("%d\n", sizeof(short int));//2
	printf("%d\n", sizeof(int));//4
	printf("%d\n", sizeof(long int));//4
	printf("%d\n", sizeof(unsigned short));//2
	printf("%d\n", sizeof(unsigned int));//4
	printf("%d\n", sizeof(unsigned long));//4
	return 0;
}

5. Operadores relacionales y expresiones relacionales.

(1) Operadores relacionales

operador significado
> más que el
>= mayor o igual a
< menos que
<= Menos que o igual a
== igual
!= no igual a

(2) Expresión relacional

expresión 1 operador relacional expresión 2

  • "=" es un operador de asignación, que representa asignación; "==" es un operador relacional, que representa juicio.
  • No 0 es verdadero, 0 es falso, falso es 0 y verdadero puede ser 1. Por ejemplo: el valor de la expresión relacional "(a=3)>(b=8)" es 0
  • Es posible que juzgar la igualdad de números reales no produzca resultados correctos. Por ejemplo: el resultado de "1.0/3*3.0==1.0" es 0

6. Operadores lógicos y expresiones lógicas.

(1) Operadores lógicos

operador && ||
nombre negación lógica lógico Y lógico o

(2) Expresión lógica

expresión1 operador lógico expresión2
o operador lógico expresión1

  • En una expresión lógica compuesta por varias subexpresiones, el cálculo se realiza de izquierda a derecha. Cuando se calcula el valor de una subexpresión para determinar el valor de toda la expresión lógica, las subexpresiones restantes a la derecha no se calcularán. calculado a partir de entonces valor de la fórmula, esta situación se denomina "cortocircuito".
  • Si una de las expresiones alrededor de && es falsa, el resultado es falso
  • || Si una de las expresiones izquierda y derecha es verdadera, el resultado es verdadero

7. Operadores condicionales y expresiones condicionales.

(1) Operador condicional

Consta de dos símbolos "?" y ":"

(2) Expresión condicional

¿Expresión 1? Expresión 2: Expresión 3

  • Orden de ejecución : Primero calcule el valor de la expresión 1. Si el valor no es 0 y la condición de la expresión es verdadera, entonces el valor de la expresión 2 se usa como el valor de toda la expresión condicional. De lo contrario, el valor de la expresión 3 es utilizado como la expresión condicional completa. Por ejemplo, el valor de 4>3?5:7 es 5
  • El tipo de expresión 1 en la expresión condicional puede ser diferente de la expresión 2 y la expresión 3, y el tipo de expresión 2 y la expresión 3 también pueden ser diferentes. En este caso, el sistema convertirá automáticamente y el resultado será la expresión 2. y expresión 3. El tipo de nivel medio es superior y se utiliza como tipo de expresión condicional. Por ejemplo, el resultado de "'a'?1:2.0" es doble tipo 1.0
  • Anidamiento secuencial: "a>3?b:c>2?1:0", según la asociatividad derecha de la expresión condicional , equivale a "a>3?b:(c>2?1:0)"

Supongo que te gusta

Origin blog.csdn.net/m0_74102736/article/details/129890527
Recomendado
Clasificación