Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Otros Temas » Programación en general » Enteros grandes en C Responder al tema
Nuevo tema


Página 1 de 1  [ 3 mensajes ] 
 
Nota 2010-06-20 07:32 @355

Perlero Nuevo
Registrado: 2007-09-09 14:44 @656
Mensajes: 67
Enteros grandes en C
Hola a todos.

Tengo una pregunta medio básica en C.
Quiero usar una variable de tipo entero sin importar su tamaño pero me encontré con que ¡no puedo ingresar números mayores a 300000!
Este es mi código:

Syntax: [ Download ] [ Hide ]
Using c Syntax Highlighting
  1. #include <stdio.h>
  2. int main(){
  3. int num = 300000;
  4. long num2 = 300000;
  5. printf("Numero: %d",num); //Imprime -27680
  6. printf("Numero2: %d",num2); //Imprime -27680
  7.  
  8. return 0;
  9. }


¿Alguna idea?
Muchas gracias


Nota 2010-06-20 18:09 @798
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10250
Re: Enteros grandes en C
Es muy sencillo de entender, si se asistieron a las clases que explicaban la matemática binaria.

El valor de 300.000 lo estás almacenando en dos variables. Una de tipo int y otra de tipo long. Por el resultado, que es el mismo, vemos que tanto una como otra realmente son el mismo tipo: un entero con signo de 32 bits.

¿Cómo es 300.000 en binario?
Syntax: [ Download ] [ Hide ]
Using bash Syntax Highlighting
~$> perl -E 'say unpack "B32", pack "N", 300_000'
00000000000001001001001111100000

Pero... a la hora de imprimir los valores, estás usando %d, que, normalmente, quiere decir que solo queremos imprimir un valor entero de simple precisión. Si estamos en una máquina con 32 bits, eso quiere decir que solo imprimirá un valor de 16 bits.

Si cogemos los 16 bits más bajos del valor anterior, nos queda:
1001001111100000

¿Qué valor es este? El 37.856. Pero el bit superior está puesto a 1, por lo que en realidad es un número negativo (recordemos que estamos con variables con signo). Entonces, en realidad es el 37856 - 65536 = -27680, que es el valor que sale en pantalla. Tu ordenador hace lo que le estás pidiendo :)

Prueba a cambiar %d por %ld, que es la forma de indicar que quieres imprimir valores "largos". Y si no vas a usar números con signo, indícalo también.

_________________
JF^D Perl programming


Nota 2010-06-21 08:10 @382

Perlero Nuevo
Registrado: 2007-09-09 14:44 @656
Mensajes: 67
Re: Enteros grandes en C
Muchas gracias por la explicación, explorer.
Ojalá mi profesor supiera tanto de programación.


Responder al tema  [ 3 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO