Programación General > C/C++
Consulta de long int
martincod:
Quisiera saber si alguien tiene idea de esto. y q toy haciendo mal
¿qué ocurre si se acaba el espacioa un enteros largos en C sin signo ? ¿qué sucede cuando un entero sin signo llega a su valor máximo y se le suma 1? Acompañe con el código que utilizó para realizar la prueba.
el codigo:
#include <stdio.h>
int main (void)
{
unsigned long int i, a;
for (i=0; i>=0;a++)
{
a++;
}
a= a + 1;
printf ("%d",a);
return 0;
}
Jeysscarr:
Si tomalos solo los positivos va desde:
0 a 18,446,744,073,709,551,615
Seria dificil sobrepasar este valor a menos que estes haciendo un for que cuente cuantos granitos de arena tiene la playa X jejeje
me imagino que sucederia lo mismo que ocurre cuando un entero pasa de 32 mil y pico, te muestra datos "basura"
ProfesorX:
--- Cita de: "martincod" ---Quisiera saber si alguien tiene idea de esto. y q toy haciendo mal
¿qué ocurre si se acaba el espacioa un enteros largos en C sin signo ? ¿qué sucede cuando un entero sin signo llega a su valor máximo y se le suma 1? Acompañe con el código que utilizó para realizar la prueba.
--- Fin de la cita ---
Para empezar tu ccodigo esta mal, empezando por el ciclo for.
--- Código: C++ --- for (i=0; i>=0;a++)
Este ciclo es un ciclo infinito, ya que preguntas si i >= 0, pero nunca cambias el valor de "i", ya que estas incrementando "a" en lugar de "i", asi que no hay forma de salir del ciclo ya que "i" siempre sera = 0. Aun asi, si incrementas "i" tampoco saldras, ya que le estas diciendo que sea mayor, y al incrementarlo, siempre sera mayor.
Ahora, respecto a lo que pasa si un entero llega a su maximo valor, la respuesta es que se produce lo que en ingles se llama un overflow o desbordamiento, y dependiendo del compilador, puede marcar un error en ejecucion, o no mostrar ningun error, y simplemente "comenzar desde el principio" con el numero mas bajo que puede representar.
Por ejemplo, el valor mas alto para un unsigned long int es 4294967295, esto, si es que llevaste matematicas de la computacion, sabras que viene de 2^32 - 1, siendo 32 el numero de bits utilizados para representar el numero de tipo long int y - 1, porque incluyes el cero. Dicho esto, el siguiente programa, si lo compilas en Visual C++, al incrementa el valor de a, te dara cero, ya que no puede representar un valor mayor a ese y como dje arriba, comenzara desde el numero mas bajo. Quizas otros compiladores marquen error de ejecucion, dependiendo de las opciones para depuracion con que haya sido compilado el programa.
--- Código: C++ --- #include <stdio.h>int main (void){ unsigned long int a; a = 4294967295; a= a + 1; printf ("%d",a); return 0;}
Saludos :)
ProfesorX:
...
shakka:
Lo primero, leer mas sobre tipos de datos en C, ya en funcion de eso y tomando en cuenta la arquitectura donde eso va a correr ya sabras cuanto es el valor maximo para un unsigned long int, y asi tomas medidas pertinentes y no asumir nada! y pruebalo tu mismo!!!
--- Código: C ---#include <stdio.h>#include <limits.h> int main() {unsigned long int c; printf("%unn", ULONG_MAX); return 0;}
En este caso no tira "basura", sino mas bien datos erroneos.
Navegación
[#] Página Siguiente
Ir a la versión completa