C/Visual C - Quiero verel Desbordamiento de un tipo long

 
Vista:
sin imagen de perfil
Val: 2
Ha aumentado su posición en 21 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Quiero verel Desbordamiento de un tipo long

Publicado por Pekka (1 intervención) el 12/04/2017 20:20:39

Hola a todos.



Tengo que hacer un programa se haga las funciones básicas de una calculadora. La idea es observar los efectos del desborde en los distinto tipos de variable. Para el tipo long inplementé la siguiente función:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
int longCal(int a, int b, char op){
/* intcalculadora
    Rango del tipo int = [-2147483648, 2147483647]
*/
    switch (op) {
        case '+':
            if ( (a+b) > 2147483647 || (a+b) < -2147483648 ) {
                printf("OVERFLOW!\n" );
                return a+b;
            }else{
                return a+b;
            }
            break;
 
        case '-':
            if ( (a-b) > 2147483647 || (a-b) < -2147483648 ) {
                printf("OVERFLOW!!\n");
                return a-b;
            }else{
                return a-b;
            }
            break;
 
        case '*':
            if ( (a*b) > 2147483647 || (a*b) < -2147483648 ) {
                printf("OVERFLOW!!!\n");
                return a*b;
            }else{
                return a*b;
            }
            break;
 
        case '/':
            if(b == 0){
                printf("Division por cero\n");
                return 0;
            }
            if ( (a/b) > 2147483647 || (a/b) < -2147483648 ) {
                printf("OVERFLOW!!!!\n");
            }else{
                return a/b;
        }
        break;
    }
}

donde si excede los los limites de la representación lanza un mensaje "OVERFLOW!!!". En el caso de sumar
2147483647 + 1 = 2147483648


y yo tendría que ver el desborde
2147483647 + 1 = -2147483648


La pregunta es, ¿Porqué no lo estoy viendo?


Lenguaje C - Compilador gcc

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Quiero verel Desbordamiento de un tipo long

Publicado por Tom (619 intervenciones) el 14/04/2017 08:56:24
Usa la lógica. En tu código a y b son de tipo int. Su suma también será de tipo int, así que nunca se sobrepasará el máximo valor que se puede almacenar en un int.
Usa casts a tipo long.
Por ejemplo:
1
2
long resul = a + b;
if(resul > INT_MAX) printf("Overflow!\n");
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar