elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Calcular el rango en byte de un determinado objeto sin utilizar <limits.h> [C]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Calcular el rango en byte de un determinado objeto sin utilizar <limits.h> [C]  (Leído 2,569 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Calcular el rango en byte de un determinado objeto sin utilizar <limits.h> [C]
« en: 21 Octubre 2016, 22:52 pm »

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.


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Calcular el rango en byte de un determinado objeto sin utilizar <limits.h> [C]
« Respuesta #1 en: 22 Octubre 2016, 05:27 am »

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


En línea

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.
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Calcular el rango en byte de un determinado objeto sin utilizar <limits.h> [C]
« Respuesta #2 en: 22 Octubre 2016, 19:30 pm »

Hola engel lex
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.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Calcular el rango en byte de un determinado objeto sin utilizar <limits.h> [C]
« Respuesta #3 en: 22 Octubre 2016, 19:44 pm »

no estoy ahorita en un lugar con compilador...
 
has un codigo con desplazamiento de bits

es decir

Código:
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

Código:
00001
00010
00100
01000
10000
00000 ---> aqui sabes que desbordaste

En línea

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.
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Calcular el rango en byte de un determinado objeto sin utilizar <limits.h> [C]
« Respuesta #4 en: 22 Octubre 2016, 21:00 pm »

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. -

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main( int argc, char **argv ){
  5. int a = 1;
  6. int contador = 1;
  7.  
  8. while(a!=0){
  9. a >>= 1;
  10. printf( "\n %d", a );
  11. contador ++;
  12. }
  13.  
  14. printf( "\n %d \n", contador );
  15.  
  16. return EXIT_SUCCESS;    
  17. }}
Saludos.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Calcular el rango en byte de un determinado objeto sin utilizar <limits.h> [C]
« Respuesta #5 en: 22 Octubre 2016, 21:37 pm »

está bien en lineas generales tu codigo, el error fue mio,

lo ecribí
Código:
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
Código:
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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. int main( int argc, char **argv ){
  6. int a = 1;
  7. int contador = 0;
  8.  
  9. while(a!=0){
  10. a <<= 1;
  11. contador ++;
  12. }
  13.  
  14. a = 1;
  15. a <<= contador-1;
  16.  
  17. printf( "\n maximo int positivo %d", a-1 );//si cambias el tipo de a, cambia el tipo de %d al respectivo
  18. printf( "\n minimo int negativo %d", a );
  19. printf( "\n el largo de la variable es de %d bits\n", contador );
  20.  
  21. return EXIT_SUCCESS;    
  22. }
En línea

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.
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Calcular el rango en byte de un determinado objeto sin utilizar <limits.h> [C]
« Respuesta #6 en: 22 Octubre 2016, 23:07 pm »

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.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Calcular el rango en byte de un determinado objeto sin utilizar <limits.h> [C]
« Respuesta #7 en: 22 Octubre 2016, 23:11 pm »

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í)
En línea

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.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines