pregunta sobre enteros en lenguaje c

Iniciado por mataliebres, 19 Febrero 2015, 18:13 PM

0 Miembros y 1 Visitante están viendo este tema.

mataliebres

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

theluigy13etv

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 :)

engel lex

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 (cpp) [Seleccionar]
#include <stdio.h>
int main (){
printf("Maximo uint %u\n",(unsigned int)-1);
printf("Maximo ulong %lu\n",(unsigned long int)-1);
}
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

mataliebres

ya me funciona chicos, llevaba tiempo sin programar y no recuerdo muy bien el lenguaje, muchas gracias
un saludo