Programación General > C/C++
Re: ¿Por que me imprime esto... ?
jubilubi:
Estoy empezando en esto de la programacion en C y tengo el siguiente codigo:
#include <stdio.h>
#include <conio.h>
void main()
{
int i;
unsigned int j;
clrscr();
j=60000;
i=j;
printf("i=%d,j=%u",i,j);
getch();
}
... el cual me imprime lo siguiente:
i=-5536, j=60000
ya le di vueltas por todos lados y no entiendo porque imprime eso. ¿Alguien podria ayudarme?
JuanK:
porque una variable int solo te sirve para almecenar desde -32670 hasta 32670, si es unsigned int te servira desde 0 hasta 65240..mas o menos.
entonces si un unsigned int de 60000 se lo asignas a un int, lo que ocurre es...
recuerda que todo esto realmente esta ocurriendo a nivel binario, asi que en esta asignacion como es mas grande de lo que cabe entre 0 y 32670 de un int, el toma el numero como si fuera la representacion de numero negativo, asi que le hace complemento a 2 bit y le suma 1.
Si haces la operacion te daras cuenta.
Debes tener en cuenta la capacidades de almacenamiento que requieres , porque algo asi sucedera cuando te desbordes en la mayoria de tipos de datos.
Juank:sorcerer:
jubilubi:
ok. Gracias juank por la informacion. Ya realize la operacion binaria y tienes razon. Gracias de nuevo.
jubilubi:
tengo una pequeña duda juank...
el valor en binario de 60000 es:
11101010 01100000
para hacer el complemento a 2 primero hago el complemento a uno:
11101010 01100000 --- ec1 (60000 en binario)
00010101 10011111 --- ec2 (complemento a uno)
el complemento a 2 lo obtengo sumando 1 a la ec2:
00010101 10011111
1
---------------------------
00010101 10100000 --- ec3 (complemento a 2)
Este numero binario (ec3) en decimal es 5536. Este es el resultado que me imprime en pantalla el programa pero en negativo. ¿hice alguna operación mal? ¿donde quedo el signo?
jubilubi:
Perdon por la molestia nuevamente juank, pero tengo otra duda. Mira, tengo el siguiente programa:
#include <stdio.h>
#include <conio.h>
void main()
{
int i=32000;
i=i*3;
printf("i=%d",i);
getch();
}
el valor de 32000 si lo puede tomar i por que esta dentro del rango de int.
al multiplicar el valor de i * 3 me queda
96000.
¿A este valor le hago el complemento a 2?
por que no me da el resultado que me imprime en pantalla. De antemano, muchas gracias por la atencion.
Navegación
[#] Página Siguiente
Ir a la versión completa