¿Cuál es la diferencia entre números enteros, punto flotante y caracteres?
c define cinco tipos de datos enteros.
Tabla de tipos de datos enteros
El nombre del tipo de número de serie representa el rango de bytes.
1 carácter con signo entero de un solo byte con signo tipo 1 -128~+127
2 short int entero corto tipo 2 -32768~+32767
3 int entero 4-2147438648 ~+214748647
4 int largo Entero largo 4-2147438648 ~+214748647
5 int largo largo entero largo 8-922337203685475808 ~+-9223372545
Ejemplo genera el número de bytes de varios tipos de enteros.
#Includes
int main(void) {
printf("sizeof(carácter firmado) = %d/n ", sizeof(carácter firmado))
printf("sizeof(short int) = %d/n ", sizeof(short int)); /* Los resultados de sizeof son todos tipos int */
printf ("tamañode(int) = %d/n ", tamañode(int));
printf("tamañode(int largo) = %d/n ", tamañode(int largo));< / p>
printf(" tamañode(long long int)= % d/n ", sizeof(long long int));
Devuelve 0
} p >
Compila y ejecuta los resultados
[root@localhost CCC]# gcc c 15. c
[root@localhost ccc]#. /a.out
tamaño de (carácter firmado) = 1
tamaño de (int corto) = 2
tamaño de (int) = 4
sizeof(long int) = 4
sizeof(long long int) = 8
Descripción del programa: sizeof es un operador de bytes, uso, sizeof (tipo de datos). La función de sizeof es obtener el número de bytes ocupados por el tipo de datos. El entorno en el que ejecutamos el programa es Redhat 5 Linux y el compilador es GCC.
2. Tipo entero sin signo
Corresponde al tipo entero con signo y al tipo entero sin signo.
Tabla de tipos de enteros sin signo
Número, tipo, nombre, número de bytes, rango de valores
1 carácter sin signo 1 0~255
2 Cancelar entero corto 2 0~65535
3 Entero sin signo 4 0~4294967295
4 Entero largo sin signo 4 0~4294967295
5 unsign long long int 8 0 ~ 18446744073709551615
El ejemplo genera el número de bytes de varios tipos de enteros sin signo.
#Includes
int main(void) {
printf("sizeof(carácter sin firmar) = %d/n ", sizeof(carácter sin firmar))
printf("sizeof (entero corto sin signo) = %d/n ", sizeof (entero corto sin signo) /* Los resultados de sizeof son todos tipos int */
printf("sizeof(unsigned int) = %d/n ",sizeof(unsigned int));
printf("sizeof(unsigned int largo) = % d/n ", sizeof(unsigned long entero));
printf("sizeof(entero largo sin signo) = %d/n ", sizeof(entero largo sin signo));
Devuelve 0;
}
Compila y ejecuta el resultado
[root @ localhost CCC]# gcc c 16
p>[root@localhost ccc]#. . /a.out
tamaño de(carácter sin signo)= 1
tamaño de(corto sin signo)= 2
tamaño de(entero sin signo)= 4
sizeof(entero largo sin signo) = 4
sizeof(entero largo sin signo) = 8
3. Constante entera
Las constantes enteras se refieren a las constantes utilizadas. para representar valores enteros, que se dividen en cuatro tipos: int corto, entero (int), int largo y int largo largo. c por defecto es un número entero (int). Tabla de representación decimal de varios tipos de constantes enteras (los sufijos no distinguen entre mayúsculas y minúsculas)
Tipo de datos del número de serie octal decimal hexadecimal
1 Entero 0112 74 0x4a
2 entero largo (l) 0112l 74l 0x4al
3 entero largo (LL) 0112LL 74LL 0x 4 todos
4 entero sin signo (u) 0112u 74u 0x4au
5 Entero largo sin signo (UL) 0112ul 74 ul 0 x4 aul
6 Entero largo sin signo (ULL) 0112 ULL 74 ULL 0x 4 aul
4.
Solo hay un tipo de datos de caracteres en lenguaje C, es decir, datos de caracteres. Char también se llama directamente tipo de carácter. Los tipos de caracteres ocupan la menor cantidad de espacio de memoria, normalmente un byte. Los números enteros almacenados en variables de tipo char se pueden representar como valores con o sin signo, según el compilador.
La longitud en bytes del tipo de datos de caracteres de ejemplo
#includes
int main(void) {
printf("sizeof( char ) = %d/n ", sizeof(char));
printf("sizeof(carácter firmado) = %d/n ", sizeof(carácter firmado));
printf("sizeof(carácter sin firmar) = %d/n ", sizeof(carácter sin firmar));
Devuelve 0;
}
Compilar y ejecute los resultados
[root@localhost CCC]# gcc c 17. c
[root@localhost ccc]#. /a.out
tamaño de(char) = 1
tamaño de (carácter firmado)= 1
tamaño de (carácter sin firmar)= 1
5. Variables de caracteres
Las variables de caracteres son variables utilizadas para almacenar valores de caracteres. Las variables de caracteres también se dividen en con signo y sin signo.
Estructura de sintaxis:
[Firmado]char ch 1;
[Sin firmar]char CH2;
Ejemplo
#Includes
int main(void) {
char ch 1 = '/n ';
Carácter sin firmar CH2 = '/t ' ;
char ch3 = 48
printf("ch1 = [%c], [%d]/n ", ch1, ch 1);
printf( "ch2 = [%c], [%d]/n ", ch2, CH2);
printf("ch3 = [%c], [%d]/n ", ch3, CH3) ;
Devuelve 0;
}
Compila y ejecuta el resultado
[root @ localhost CCC]# gcc c 18. c
[raíz@localhost ccc]#. /a.out
ch1 = [
], [10]
ch2 = [ ], [9]
ch3 = [0], [48]
Descripción del programa: El carácter de escape '/n' es un carácter de nueva línea. En la primera función printf, %c se reemplazará con '/n' y la salida se reemplazará con un carácter de nueva línea. Podemos ver que el carácter de nueva línea aparece entre los primeros corchetes de la salida. %d es el valor del código ASCII de c1. El carácter de escape '/t' es un carácter de tabulación horizontal, y %c en el segundo printf se reemplazará con '/t' y se enviará al terminal. El código ASCII correspondiente al valor 48 es 0, por lo que la salida correspondiente al terminal es 0.
6. Tipos de datos de punto flotante
El lenguaje C define tres tipos de datos de punto flotante:
Punto flotante, precisión simple
Precisión doble
Precisión doble larga, precisión doble larga
El estándar C tiene diferentes regulaciones para diferentes tipos de números de coma flotante. Las longitudes de bytes también varían según diferentes compiladores o diferentes condiciones de hardware.
Utilice un ejemplo para probar tres longitudes de bytes de coma flotante
#Include
int main(void) {
printf(" sizeof (flotante) = %d/n ", tamaño de (flotante));
printf("tamaño de (doble) = %d/n ", tamaño de (doble));
printf(" sizeof(long double)= % d/n ",sizeof(long double));
Devuelve 0;
}
Compilar y ejecutar resultados
[root @ localhost CCC]# gcc c 19. c
[root@localhost ccc]#. /a.out
tamaño de (flotante) = 4
tamaño de (doble) = 8
tamaño de (doble largo) = 12
Longitud de bytes de coma flotante, precisión, rango de orden de magnitud y tabla de formato de E/S
Número de serie tipo de datos longitud de bytes precisión orden de magnitud rango formato printf y scanf
1 float ( f) 4 7 -38~38 %f
2 doble 8 es aproximadamente 16-308 ~ 308% F.
3 doble largo (1) 12 aproximadamente 19 -4932~4932 %llf.
7. Precisión del punto flotante
La precisión del punto flotante se clasifica de menor a mayor como flotante, doble, largo, doble.
Ejemplo de comprobación de la precisión del punto flotante
#includes
int main(void) {
float f = 0.9876543210123456789012f /*You; No se puede usar el sufijo f, pero se advierte */
Double d = 0.9876543210123456789012;
Long double LD = 0.9876543210123456789012l /*Suffix L o L */
printf("f/t= %.25f/n ", f);
printf("d/t= %.25lf/n ",
printf); (" LD/t = % . 25 lf/n ", LD);
Devuelve 0
}
Compila y ejecuta el resultado
[root@localhost ccc]# gcc c20.c
[root@localhost ccc]#. /A.out
F = 0.9876543283462524414062500
D = 0.9876543210123456262954
LD = 0.9876543234789217150
8. Método de almacenamiento en coma flotante
Los valores de coma flotante se almacenan en la memoria en notación científica. La forma de memoria de punto flotante contiene tres partes:
1) Bit de signo
Bit de signo El bit de signo del tipo de punto flotante tiene solo un bit, que es el bit más alto. Este bit es 1, que indica un número negativo, y este bit es 0, no negativo.
2) Bit de exponente
El bit de exponente de punto flotante se almacena en forma de complemento, que es la parte exponente del método de notación científica.
3) Número base
El bit base es el último bit del tipo coma flotante y determina la precisión del valor.
Tabla de segmentos de almacenamiento de coma flotante
Número de serie tipo de datos bit de signo exponente bit base valor de desviación de bit
1 tipo de coma flotante 1 8 23 127
2 double 1 11 52 1023
3 long double 1 15 64 16383
Ejemplo de detección del estado de almacenamiento de float, double y long double.
#Incluye
int main(void) {
float fone = 2.0
float ftwo = 2.5
doble hecho = 2.0
doble ddos = 2.5
largo doble ldone = 2.0
largo doble lddos = 2.5
/*Salida El contenido de almacenamiento de datos de punto flotante en la memoria*/
printf(" float(2.0)= % 08x/n " ,*(int *)(& amp;fone));
printf(" float(2.5)= % 08x/n " ,*(int *)(& ftwo));
/*Emite el contenido de almacenamiento de datos de doble precisión en la memoria*/< / p>
printf(" double(2.0)= % 016 llx/n " ,*(long long *)(& hecho));
printf(" double(2.5)= % 016 llx /n " ,*(long long *)(& dtwo));
/*Envía el contenido de almacenamiento de datos largos de doble precisión en la memoria*/
printf(" londou( 2.0)= % 08x % 08x % 08x/n ",
*(((int *)(& ldone)) + 2),
*(((int *) (&ldone)) + 1),
*(((int *)(&ldone)))));
printf(" londou(2.5)= % 08x % 08x % 08x/n ",
*(((int *)(& ldtwo)) + 2),
*(((int *)(& ldtwo) ) + 1),
*(((int *)(& ld dos)))));
Devuelve 0;
}
Compila y ejecuta el resultado
[root @ localhost CCC]# gcc c 21. c
[ root@localhost ccc]#. /a.out
flotante (2.0) = 40000000
flotante (2.5) = 40200000
doble(2.0) = 400000000000000
doble(2.5) = 400400000000000
londou(2.0)= 00004000 800000000000000
londou(2.5)= 00004000 a 000000000000