Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mataliebres en 19 Febrero 2015, 18:13 pm



Título: pregunta sobre enteros en lenguaje c
Publicado por: mataliebres en 19 Febrero 2015, 18:13 pm
hola compañeros, he echo un programita para saber si un numero es primo o no, y funciona bien, el problema es que solo acepta 9 cifras ejemplo 999.999.999 ese es el maximo, la variable la declaro con int, se que se puede declarar por ejemplo long o long long y el tope es mucho mas largo, el problema es que  me da error al compilar, diciendo que no se puede saber el resto con el tipo de entero long, no se si me habeis entendido asi que os pongo un ejemplo de como tengo hecho el programa con las variables int,

asi funciona bien
int numero=153462567;
int divisor=2;
if((numero%divisor)==0)

asi falla al compilar y da error
long numero=2555666777;
long divisor=2;
if((numero%divisor)==0)

para coger el numero tengo un scanf() pero ese no creo que sea el problema porque lo he hecho sin el y da el mismo error


Título: Re: pregunta sobre enteros en lenguaje c
Publicado por: theluigy13etv en 19 Febrero 2015, 18:28 pm
Hola, no sé si es que te entendí bien, pero creo que cuando dices: "el problema es que  me da error al compilar" no te refieres a un error de compilación sino a un error lógico en tiempo de ejecución (eso es lo que me da a mí. Uso Dev C++).

El error que puedo ver es que cuando haces esta asignación:

long numero=2555666777;

La variable "numero" se desborda y no puede guardar un número muy grande.

No sé cómo funcione en tu computador, pero en el mío cuando uso el operador sizeof para ver el tamaño del tipo int y long me sale en ambos 4 bytes. En cambio, el tipo long long tiene un tamaño de 8 bytes, por lo que si declaras la variable de tipo long long no habría desbordamiento al guardar el número 2555666777:

long long numero=2555666777;

Ojalá sea esta tu duda :)


Título: Re: pregunta sobre enteros en lenguaje c
Publicado por: engel lex en 19 Febrero 2015, 19:49 pm
efectivamente como indica theluigy13etv el error no es de compilacion sino de tiempo de ejecución

normalmente las variables son limitadas
int son 32 bits, desde -2147483647, hasta 2147483647
unsigned int 32 bits sin signo, desde 0 hasta 4294967295
unsigned long int son 64 bits, desde 0 hasta 18446744073709551615


de todas formas puedes comprobarlo con el siguiente codigo
Código
  1. #include <stdio.h>
  2. int main (){
  3. printf("Maximo uint %u\n",(unsigned int)-1);
  4. printf("Maximo ulong %lu\n",(unsigned long int)-1);
  5. }


Título: Re: pregunta sobre enteros en lenguaje c
Publicado por: mataliebres en 20 Febrero 2015, 00:33 am
ya me funciona chicos, llevaba tiempo sin programar y no recuerdo muy bien el lenguaje, muchas gracias
un saludo