Hola, ¿ cómo están ?
Bueno lo dicho, alguien me puede decir si esto es factible y de serlo, por favor, podrían dar alguna referencia. -
Saludos.
si es unsigned tienes la opción siempre de restarle 1 a un objeto incializado en 0... esto llevará su posición a la maxima...
si es signed sabes que negativo es el inverso de los numeros (1 a 0) cuando el primer bit es 1, entonces solo tienes que hacer desplazamiento de bits hasta que te de un negativo... en ese punto sabes que el negativo fue el bit de mayor orden
tambien puedes en ambos casos hacer desplazamiento de un 1 hasta que vuelva a 0, en ese caso sabes que ese fue el punto de desbordamiento, solo tienes que contar los saltos y la potencia de 2 saltos menos 1 es el limite
Hola engel lex
Cita de: engel lex en 22 Octubre 2016, 05:27 AM
tambien puedes en ambos casos hacer desplazamiento de un 1 hasta que vuelva a 0,
en ese caso sabes que ese fue el punto de desbordamiento,
solo tienes que contar los saltos y la potencia de 2 saltos menos 1 es el limite
Sin lugar a dudas es lo busco, pero no logro implementarlo ni siquiera intentarlo, me podrías guiar con un poco de código, si lo deseas gracias y si no igual me sirve como idea. -
Saludos.
no estoy ahorita en un lugar con compilador...
has un codigo con desplazamiento de bits
es decir
TIPO a = 1;
int contador = 1;
while(a!=0){
a >> 1;
contador ++
}
"TIPO" es el tipo de variable con la que lo declares
aqui el comportamiento de "a" será algo como
00001
00010
00100
01000
10000
00000 ---> aqui sabes que desbordaste
Dejo lo que hice, pero no me funciona, voy a seguir buscando y si tienes tiempo te agradecería que me digas lo que estoy haciendo mal. -
El igual en la lineal 9 lo puse porque de lo contrario hacia un bucle infinito. -
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char **argv ){
int a = 1;
int contador = 1;
while(a!=0){
a >>= 1;
printf( "\n %d", a );
contador ++;
}
printf( "\n %d \n", contador );
return EXIT_SUCCESS;
}}
Saludos.
está bien en lineas generales tu codigo, el error fue mio,
lo ecribí
a >> 1;
porque no te estoy dando el codigo, solo una idea... XD
pero si tuve el error en la dirección... igual cuando te den codigos, así sea aquí procura revisar la lógica a antes de ejecutarlo... otra cosa, el contador empieza en 0 no en 1, es un while, no un do-while
el ejemplo interno del ciclo
00001
00010
00100
01000
10000
00000 ---> aqui sabes que desbordaste
el 1 se mueve hacia la izquierda... el desplazamiento lo puse al contrario debe ser <<
con una pequeña correción y quitando la impresión de arriba queda algo como
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char **argv ){
int a = 1;
int contador = 0;
while(a!=0){
a <<= 1;
contador ++;
}
a = 1;
a <<= contador-1;
printf( "\n maximo int positivo %d", a-1 );//si cambias el tipo de a, cambia el tipo de %d al respectivo
printf( "\n minimo int negativo %d", a );
printf( "\n el largo de la variable es de %d bits\n", contador );
return EXIT_SUCCESS;
}
Hola.
Me imagino por lo que escribiste que estas con el seño fruncido así que no voy a pedir el porqué pero en 2 tipos el resultado no me da correcto. -
Voy a practicar y cuando encuentre la solución la posteo para quien la consulte no encuentre errores . -
Un abrazo.
no para nada ;D mas bien me dio pena no ver el error... para ver en que casos... y como haces el printf (que te dejé una advertencia ::) allí)