conversión C tipo de datos


Cuando el ordenador lleva a cabo una operación aritmética, cada tipo requiere operandos tienen el mismo tamaño (número de bits almacenada) y el almacenamiento, no de tipo char (1 byte) tipo de datos int (2, 4 u 8 bytes) de datos directamente implicados operación; debido a las diferentes formas de almacenamiento, ni pueden un int y doble datos directamente involucrados en el cálculo.

Sin embargo, debido a la flexibilidad del lenguaje C, en una expresión o una declaración, lo que permite diferentes tipos de operaciones de mezcla de datos.

flexibilidad mecánica del lenguaje de programación C es una contradicción, como malos tratos, producirá resultados erróneos. Puede llevarse a cabo de manera implícita automáticamente para ciertos tipos de convertidores compilador, sin la intervención del programador, llamada la conversión de conversión automática , y algún tipo de conversión requiere que el programador especificar explícitamente este tipo de conversión que se conoce fundido .

Una conversión de tipo automático

Una operación de mezclado entre los diferentes tipos de expresión se produce, menor a mayor tipo automático tipo de conversión.

Las diferencias entre los diferentes tipos de datos que el alcance y la precisión de los datos, en general, cuanto mayor es el rango de los datos, mayor será la precisión, más del tipo "High".

Entero nivel de tipo de baja a alta como sigue:

firmado carac-> sin firmar carac-> corto> corto sin signo> INT> sin firmar INT> largo> largo sin signo

Flotador de nivel de bajo a alto de la siguiente manera:

Float-> doble

Flotamos tipo de punto flotante está en desuso, así que no hay de qué.

1, no hay datos de operando de punto flotante

Cuando el char, unsigned char, corto, o corto sin signo se produce en el cálculo involucrado en la expresión, generalmente convierten automáticamente a tipo int.

unsigned int int cuando se mezcla operación, tipo int convierte automáticamente a unsigned int.

int, unsigned int y largo tiempo de operación de mezcla, se convierten a tipo long.

2, el operandos en coma flotante de Datos

Cuando el número de datos de punto flotante contenida en la operación, los dos operandos se convierten a duplicar.

Por ejemplo:

int ii=100;
double dd=200.5;
ii+dd;

Las expresiones aritméticas arriba descritos dd operando como un doble, se convierte primero a una participación ii flotador doble después de la operación, de doble precisión en coma flotante resultado del cálculo es 300,5.

3, ambos tipos de asignación de símbolo de la operación inconsistente

Cuando el valor de la derecha es el operador de asignación (que puede ser constante, variable o expresión) es incompatible con el tipo de tipo de valor a la izquierda y el tipo de valor de elevación derecho / descenso a la izquierda del tipo de valor. Por ejemplo:

double dd;
dd=10;  // 右值为双精度,左值为整数

Puesto que el valor-DD-doble precisión de punto flotante, a fin de poner el valor justo después de la constante entera 10 promovido a doble punto flotante de precisión, y luego asignado a dd, no sólo no pierden precisión, pero una mayor precisión.

int ii;
ii=10.5;   // 右值10.5为双精度,左值为整型

10,5 rvalue valor entero de doble reducción, a la izquierda, es decir la parte fraccionaria se descarta 10.5, 10 asignados a las variables enteros II, esta situación perderá precisión.

4, los valores izquierdo y derecho más allá de la gama de un tipo de valor

Peor de los casos, la gama del operador de asignación más allá de los valores de izquierda y derecha representan el rango de valores del tipo, el valor de los cuales cortará la derecha, el valor asignado a la izquierda. Los resultados pueden ser de sentido. Por ejemplo:

char c;             //  char占8位,取值范围是-128-127。
c=1025;             //  整数1025 对应二进制形式是100 0000 0001,超出了8位。
printf("%d",c) ;  //  以十进制输出c的值

La salida es 1, ya que tomando sólo los 8 bits inferiores 1025 0000 0001 (valor de 1) asignados a la variable de carácter C, para obtener un sentido de valor.

En segundo lugar, el reparto

Aunque la conversión automática sin intervención manual, fácil de usar, pero hay ventajas y desventajas, especialmente cuando tipo automático se convierte de una más alta para un tipo de conversión de tipo inferior, se recortan o reducen la precisión de los datos, el resultado esperado puede no obtenerse.

Para proporcionar más autoridad de control a los diseñadores de conversión de tipo de programa para hacer la programación más flexible, objeto de la conversión más clara, lenguaje C proporciona la sintaxis puede especificar explícitamente el tipo de conversión, comúnmente conocida como molde.

Formato de fundido:

(目标类型) 表达式;

Por ejemplo:

int a,b;
a=4;
b=3;
double dd;
dd=a/b;            // dd的结果将是1。
dd=(double)(a/b);  // dd的结果是1.000000。
dd=(double)a/b;   // dd的结果是1.333333

dd = a / b, resultado dd es 1, esto se entiende bien que, como un entero o un número entero entero división, no parte fraccionaria.

dd = (doble) (a / b), resultado dd es 1.000000, la difícil de entender, su proceso de operación es:

(1) calcular primero a / b, el resultado es un número entero de 1;

(2) para convertir un número entero de doblar, es 1,000000.

dd = (doble) a / b, dd 1,333333 resultado, esto no se entiende bien, su proceso de operación es:

(1) primera ejecución (doble) a, para convertir un doble, es decir, 4,000000;

(2) dividido por 3 a 4.00000, 1.333333 obtenido, cumple con las reglas de conversión de tipo automático.

También hay un problema, los programadores no saben es (doble) una prioridad o una prioridad / b, la mejor manera se escribe como ((doble) a) / b, lo que no hay duda.

En tercer lugar, la tarea

Escribir el programa de ejemplo, esta sección describe el conocimiento de toda la demo de nuevo, el programa de demostración puede profundizar su comprensión y la cartografía.

En cuarto lugar, el aviso de copyright

C Tecnología de Red de Lenguaje artículo original, que se reproduce por favor indique el enlace de la fuente con el artículo, el autor y original.
Fuente: C Tecnología de red Idioma (www.freecplus.net)
Autor: Ética código de Agricultura

Si los errores tipográficos o errores de artículos, contenido, u otras sugerencias y comentarios, por favor mensaje yo correcta, muchas gracias! ! !

Publicó un artículo original · ganado elogios 2 · Vistas 6733

Supongo que te gusta

Origin blog.csdn.net/u010806950/article/details/105043999
Recomendado
Clasificación