Informacion de variables en C

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, m0skit0, LnD, ka69, zacky06

Responder
Xanatos
Habitual
Habitual
Mensajes: 226
Registrado: 11 Nov 2009, 09:59

Informacion de variables en C

Mensaje por Xanatos »

hola después de ver los cursos de programación, me dieron ganas de aportar con un poco de historia y de información pues de la que yo me se ;):

m0skit0 ya os ha hablado de los diferentes tipos de variables y ya muchos saben como utilizarlos.

pues ahora una pequeña profundización...

aparte de las variables que ya todos conocen como int (números enteros ejm: 1, 2 , 3... ) float (numeros con un punto o coma ejm: 1,23 o 12,3 ...) y char (caracter a, b, c, d...) se pueden especificar mas los tipos de variables.

por ejemplo escribiendo "long int numero;" o solo "long numero;"

esto es necesario si se sabe que el numero va a ser muy grande (mayor que 32767)

por que el valor 32767??? pues facil, para el computador el numero 3 no es "nada", el solo "habla" binario por decirlo de alguna forma. una variable de tipo "int" posee 16 bits de espacio en memoria (16 bits NO bytes) eso significa:
como el ejemplo de las cajas de m0skit0 un int es una caja de 16 y se representa
asi...

xxxx xxxx xxxx xxxx son 16 equis donde esas equis solo pueden ser 1 o 0 (binario)

y el numero mas grande seria:

0111 1111 1111 1111 (16 unos)

de los cuales el 0 (el rojo) dice si es negativo o positivo osea solo nos quedan "15 unos" para el numero mas grande el cual en decimal es:
0 111 1111 1111 1111 = +32767

Para las variables de tipo float (32 Bits) es casi lo mismo primero un ejemplo:

el numero 12.345 también se puede escribir 1.2345*10¹ o como 0.12345*10²

bueno generalizando cualquier "numero con punto" se puede representar asi:

m*b²

en nuestro caso el numero 12.345 también como 0.012345*10³ nuestro m = 012345 b = 10 y el e = 3 (b = base, e = exponente, m = matisse) en C la base es 2 y no 10 y esta establecido por una norma del IEEE.
y el numero se veria asi en memoria:

X XXXX XXXX XXXXXXXXXXXXXXXXXXXXX (solo unos y ceros)

como ya sabemos el primer numero es el signo ("1 = -", "0 = +",)

despues los 8 digitos que siguen son nuestro exponente e y los siguientes 23 nuestra matisse o como se llame.

mas informacion sobre el tema de binario
http://es.wikipedia.org/wiki/Complemento_a_dos

ahora una pequeña tabla:
(creo que esto se cumple en computadores de 32bits solamente la verdad no se)

Tipo de Variable----Tamano en Bits--------Valores posibles

char________________8_______________-127 hasta 127
unsigned char________8_______________0 hasta 255
signed char__________8_______________-127 hasta 127
int_________________16_______________-32767 hasta 32767
unsigned int_________16_______________0 hasta 65535
signed int___________16_______________igual que int
short int____________16_______________igual que int
unsigned short int____16_______________0 bis 65535
signed short int______16_______________igual que short int
long int_____________32___________-2 147 483 647 hasta 2 147 483 647
signed long int_______32_______________igual que long int
unsigned long int_____32_______________0 hasta 4 294 967 295
float_______________32___________exactitud 6 números después del punto
double_____________ 64___________exactitud 10 números después del punto
long double_________128__________ exactitud 10 números después del punto


pregunta por que aparece un char como 8 dígitos se pueden guardar números???
si, pero no es nada recomendable!

bueno la verdad no se si eso será posible en los compiladores de hoy en dia.

char a = 45;
char b = -85;

tampoco lo intente solo trae problemas como el del año 2000 :o , que como muchos recuerdan el mundo informático (programadas en C) iba a tener grandes problemas por el cambio de milenio pues fue mas o menos por esto:
antes tener espacio para tener algo guardado era muy costoso y pues muchas cosas electrónicas en vez de invertir mas dinero en 16 bit para almacenar números, decidieron hacerla fácil y decir ponemos un char como variable y almacenamos números del 00 al 99 (char -127 hasta 127) la gente veía el año 2000 demasiado lejos y pues muchos programas que "sobrevivieron" hasta esa época tuvieron que ser actualizados y cambiar ese char por un int!

espero que todo lo que halla dicho sea cierto :lol:

si no acepto correcciones y/o cambios la verdad todo estos es de le que me puede acordar, si alguien tiene preguntas o correcciones serán bienvenidas

Gracias!
Última edición por Xanatos el 15 Feb 2010, 19:36, editado 1 vez en total.

Avatar de Usuario
finfantasy
Habitual
Habitual
Mensajes: 153
Registrado: 15 Oct 2009, 19:00

Re: Informacion de variables en C

Mensaje por finfantasy »

Lo de los tamaños es muy relativo, depende de la máquina y el compilador que uses, el tamaño de cada tipo de datos será distinto. Creo que existen unas variables que tienen siempre el mismo tamaño independientemente del compilador, pero ahora no las recuerdo xD.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Informacion de variables en C

Mensaje por m0skit0 »

finfantasy escribió:Lo de los tamaños es muy relativo, depende de la máquina y el compilador que uses, el tamaño de cada tipo de datos será distinto.

Efectivamente. En PSP por ejemplo int es 32 bits, no 16.
Imagen

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

Re: Informacion de variables en C

Mensaje por arisma »

Se puede usar directivas para establecer en función de la plataforma el valor correcto.
Última edición por arisma el 16 Feb 2010, 12:07, editado 1 vez en total.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Informacion de variables en C

Mensaje por m0skit0 »

Esto en realidad no sólo vale para las variables en C, sino para todos los lenguajes de programación sobre máquinas binarias.
Imagen

Xanatos
Habitual
Habitual
Mensajes: 226
Registrado: 11 Nov 2009, 09:59

Re: Informacion de variables en C

Mensaje por Xanatos »

todo lo que dicen ustedes es cierto, yo hablaba y contaba de los valores en "general" de una arquitectura de 32 bits.

si alguien quiere saber el tamano en su PC el codigo seria:


Spoiler:
#include <stdio.h>

int main()
{
printf("El tamaño de un int es de %d bits\n", sizeof(int)*8);
printf("El tamaño de un short es de %d bits\n", sizeof(short)*8);
printf("El tamaño de un long es de %d bits\n", sizeof(long)*8);
printf("El tamaño de un char es de %d bits\n", sizeof(char)*8);
printf("El tamaño de un float es de %d bits\n", sizeof(float)*8);
printf("El tamaño de un double es de %d bits\n", sizeof(double)*8);

return 0;
}



que esten bien.

pd: La función sizeof() devuelve el valor en bytes, y como un byte es 8 veces un bit, por eso la multiplicación por 8.

Responder