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

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Como detectar un desbordamiento de enteros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como detectar un desbordamiento de enteros  (Leído 2,749 veces)
kutcher

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Como detectar un desbordamiento de enteros
« en: 23 Agosto 2014, 02:53 am »

Buenas, quisiera saber algún método para detectar un posible desbordamiento de enteros al realizar una multiplicación de dos variables de tipo unsigned para asi almacenar con seguridad el resultado en otra, le estuve dando vueltas al asunto pero no encuentro como hacerlo

Saludos kutcher 


En línea

Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Como detectar un desbordamiento de enteros
« Respuesta #1 en: 23 Agosto 2014, 03:44 am »

Hay una manera de determinar si una operación es probable que desborde usando las posiciones de los bits uno más significativos por ejemplo:

Código
  1. size_t bit_mayor(unsigned n)
  2. {
  3.    size_t bits = 0;
  4.    while (n) ++bits, n >>= 1;
  5.  
  6.    return bits;
  7. }
  8.  
  9. bool mult_segura(unsigned a, unsigned b)
  10. {
  11.    size_t a_bits = bit_mayor(a), b_bits= bit_mayor(b);
  12.    return ( a_bits + b_bits <= 32 );
  13. }
  14.  
  15. int main(void)
  16. {
  17.    unsigned a = 2, b = 4294967295;
  18.    unsigned result = 0;
  19.  
  20.    if(mult_segura(a, b))
  21.    {
  22.        result = a * b;
  23.        printf("Multiplicacion: %u\n", result);
  24.    }
  25.    else
  26.        puts("Posible desbordamiento de enteros");
  27.  
  28.    return 0;
  29. }
  30.  

Saludos


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Como detectar un desbordamiento de enteros
« Respuesta #2 en: 23 Agosto 2014, 07:06 am »

quisiera saber algún método para detectar un posible desbordamiento de enteros al realizar una multiplicación de dos variables de tipo unsigned para asi almacenar con seguridad el resultado en otra
a * b > MAX ==> a > MAX / b, b > MAX / a

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
kutcher

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: Como detectar un desbordamiento de enteros
« Respuesta #3 en: 24 Agosto 2014, 03:30 am »

Excelente gracias por responder Blaster y rir3760 voy a probar los metódos que me proponieron

Saludos kutcher
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Como detectar un desbordamiento de enteros
« Respuesta #4 en: 24 Agosto 2014, 22:26 pm »

Hola a todos y que tengan un muy buen día.-
rir ¿esto tiene que ver con la fórmula que proponías?

Código
  1. //a * b > MAX ==> a > MAX / b, b > MAX / a
  2.  
  3. #include<stdio.h>
  4.  
  5. int main(void){
  6. unsigned int a = 2147483648, b=2, c=0, d = -1;
  7. c = d/b;
  8.  
  9. if(a>c)
  10. printf("\n %u * %u supera el m%cximo permitido --> %u", a, b, 160, d);
  11. else{
  12. c = a*b;
  13. printf("\n %u * %u = %u", a, b, c);
  14. }
  15.  
  16.  
  17. printf("\n\n");
  18. return 0;
  19.  
  20. }
  21.  

Kutcher mil disculpas por interferir en tú hilo pero no me pareció atinado hacer un post tan cercano y con la misma pregunta, es que me pareció interesante el tema sólo que tenía dudas con la formula de rir3760, lo de Blaster es por el momento demasiado avanzado para este momento mío.-

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Alguien sabe como abrir un archivo de 500 mb sin desbordamiento
Programación Visual Basic
ELGRANSOLRAC 3 2,237 Último mensaje 18 Octubre 2006, 20:27 pm
por ZuKaR
Desbordamiento de enteros en PHP 5.x
Noticias
wolfbcn 0 1,916 Último mensaje 29 Abril 2011, 13:47 pm
por wolfbcn
¿Cómo puedo pasar dos enteros por referencia?
Java
theluigy13etv 2 2,996 Último mensaje 16 Abril 2012, 20:04 pm
por theluigy13etv
Como imprimir los valores de un vector de enteros?
ASM
xoker 5 10,914 Último mensaje 7 Enero 2014, 10:36 am
por xoker
[C] Ayuda: introducir enteros y devolverlos como puntero
Programación C/C++
andie13 4 2,344 Último mensaje 27 Noviembre 2016, 00:20 am
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines