Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Valor máximo de un entero

Iniciado por GrEnDeL, 29 de Marzo de 2003, 05:22:06 PM

« anterior - próximo »

GrEnDeL

                                Necesito saber cuando una variable de tipo unsigned int ha llegado a su valor máximo.

Cada compilador tendrá un valor máximo, pero ¿hay alguna constante o función que te diga el valor máximo independientemente del compilador que use? Hombre, supongo que si decremento cero obtendré el máximo, pero ¿hay alguna forma más elegante? ;)

Lo necesito para saber si cuando una variable se va a desbordar.

Es una tontería, pero si alguien lo sabe pues...

Thnks!                                
b>Cristóbal Carnero Liñán aka GrEnDeL
http://www.grendelweb.go.to
grendel_ccl@hotmail.com

Mars Attacks

                                Utiliza sizeof(loquesea). Nunca he tenido esas dudas, pero supongo que funcionará.
printf("%dn",sizeof(GrEnDeL));
;)                                

MChiz

                                Hola:

El sizeof no te va a funcionar. Sizeof devuelve el numero de bytes que ocupa el tipo de variable que le pases ( char, por ejemplo ) o si le pasas una variable, te dara el tamaño en bytes del tipo de esa variable; es decir, lo mismo :b
Para hacer lo que tu dices, no hay ningun problema excepto si trabajas en modo plano o modo real. Tendrias problemas con los ints, que en modo plano son 32 bits y en modo real son 16. Pero lo que no va a cambiar es lo que ocupe un bit. Es decir, 32 bits, en cualquier compilador, van a ser 32 bits.
Lo que yo te recomiendo que hagas es que, si por ejemplo quieres una variable de 16 bits, utilices el tipo short ( aunque trabajes en modo real ). Si quieres una variable de 32 bits, utiliza el long, en vez del int.
Bueno, pos es asi de facil :)
Adios!                                

BeRSeRKeR

                                Mínimo valor posible de un entero:

min = -2 ^ ((sizeof(int) * 4) - 1) = -2147483648
max = (2 ^ ((sizeof(int) * 4) - 1)) - 1 = 2147483647

con eso podrás saber cuándo tu variable está a punto de desbordarse...

Saludos                                
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

BeRSeRKeR

                                Publicado: Dom Mar 30, 2003 11:44 am

MChiz, si lo hacemos a proposito no nos sale xDDDDD

Saludos                                
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

GrEnDeL

                                Oye, pues muchas gracias, voy ahora mismo a probarlo!!!                                
b>Cristóbal Carnero Liñán aka GrEnDeL
http://www.grendelweb.go.to
grendel_ccl@hotmail.com

BeRSeRKeR

                                Aclarar que el rango [-2147483648, 2147483647] es suponiendo que un int sea de 32 bits...pero al utiliza el sizeof(int) pues no hay problema ya que te devuelve el tamaño en bytes del entero...

Saludos                                
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

jpastor

                                También se puede mirar/usar la cabecera limits.h.                                

GrEnDeL

                                Pues es verdad...

Hay un define llamado UINT_MAX que te dice el valor máximo del unsigned int, pero digo yo ¿esta constante se puede encontrar en todos los compiladores de C++? Osea que si es estandar...

Parece que si, porque lo he mirado en el Visual C++ y en Dev-C++ y vienen.

Pues muchas gracias JPastor ;)                                
b>Cristóbal Carnero Liñán aka GrEnDeL
http://www.grendelweb.go.to
grendel_ccl@hotmail.com

Grugnorr

                                limits es parte del standard, así que debería venir                                
hat the hells!

Mars Attacks

                                Qué cacao. Y menuda compenetración vosotros dos XD
Y perdón por el fiasco  :oops:                                

MChiz

                                Que bueno Berseker XDD es la Fuerza, oh maestro!! :bbbb
Anda Mars, como si ninguno nos equivocasemos :)
Yo si que pido perdon por mi solucion; es la mas trapera :b
Adioos!                                






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.