• Lunes 29 de Abril de 2024, 07:26

Autor Tema:  Consulta de long int  (Leído 2497 veces)

martincod

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Consulta de long int
« en: Viernes 23 de Abril de 2010, 18:00 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 134
  • Nacionalidad: co
    • Ver Perfil
Re: Consulta de long int
« Respuesta #1 en: Viernes 23 de Abril de 2010, 19:17 »
0
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"
Nuestro poder está creciendo mas rápido que nuestra sabiduria

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Consulta de long int
« Respuesta #2 en: Viernes 23 de Abril de 2010, 20:27 »
0
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.

Para empezar tu ccodigo esta mal, empezando por el ciclo for.

Código: C++
  1.  
  2. for (i=0; i>=0;a++)
  3.  
  4.  

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++
  1.  
  2. #include <stdio.h>
  3. int main (void)
  4. {
  5.     unsigned long int a;
  6.     a = 4294967295;
  7.     a= a + 1;
  8.     printf ("%d",a);
  9.     return 0;
  10. }
  11.  
  12.  

Saludos :)
« última modificación: Viernes 23 de Abril de 2010, 20:34 por ProfesorX »

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Consulta de long int
« Respuesta #3 en: Viernes 23 de Abril de 2010, 20:32 »
0
...

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

shakka

  • Miembro HIPER activo
  • ****
  • Mensajes: 679
  • Nacionalidad: cr
    • Ver Perfil
    • http://mbrenes.com
Re: Consulta de long int
« Respuesta #4 en: Viernes 23 de Abril de 2010, 20:55 »
0
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
  1. #include <stdio.h>
  2. #include <limits.h>
  3.  
  4. int main() {
  5. unsigned long int c;
  6.  
  7. printf("%unn", ULONG_MAX);
  8.  
  9. return 0;
  10. }
  11.  
  12.  

En este caso no tira "basura", sino mas bien datos erroneos.

martincod

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Consulta de long int
« Respuesta #5 en: Viernes 23 de Abril de 2010, 23:44 »
0
muchas gracias x la ayuda, ahora hice otro programa para determinar q pasa cuando se le suma +1 al maximo valor positivo y cuando se les resta 1 al maximo valor negativo, hablo de un long int con signo.
ahora quisiera saber como se  haría  un programa en C para evitar las situaciones de los casos anteriores

aca dejo el codigo del programa q hice
Código: C++
  1.  
  2. #include <stdio.h>
  3. int main (void)
  4. {
  5.     signed long int a,b;
  6.     a = 2147483647;
  7.     a = a + 1;
  8.     b = -2147483648;
  9.     b = b - 1;
  10.   printf ("al sumarle 1 al maximo valor positivo da: %ldn",a);
  11.   printf ("al restarle 1 al maximo valor negativo da: %ldn",b);
  12.    return 0;
  13. }
  14.  
  15.  

jaajmonterrey

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Consulta de long int
« Respuesta #6 en: Domingo 25 de Abril de 2010, 01:33 »
0
Podrias poner una condición if en el for cuando sea igual al máximo número que vas útilizar le pones una intrucción que saq del ciclio por ejemplo un break. o un exit para fin del programa o que te salga un anuncio en pantalla que sobre paso el limite y volver a contar de nuevo etc.

martincod

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Consulta de long int
« Respuesta #7 en: Domingo 25 de Abril de 2010, 04:31 »
0
Gracias x tu ayuda yo hice el siguiente programa, pero cuando ingreso un numero mayor a  2147483647, x ej 2147483648, no me lo toma, me lo suma, nose xq. Alguien tiene idea xq pasa esto???
aca dejo el codigo
Código: C++
  1.  
  2. #include <stdio.h>
  3. # pragma warning(disable: 4996)
  4. int main (void)
  5. {
  6.     signed long int a;
  7.     printf ("Ingrese un numero: ");
  8.     scanf ("%ld",&a);
  9.     if (a >= 2147483647)
  10.     {
  11.     printf ("El numero ingresado pasa el limite establecidon");
  12.     printf ("Ingrese un numero: ");
  13.     scanf ("%ld",&a);
  14.     }
  15.     else
  16.         a =a + 1;
  17.     printf ("Al sumarle uno al valor ingresado, el resultado es: %ldn", a);
  18. }
  19.  
  20.