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


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Son estos operadores ternarios iguales?
0 Usuarios y 5 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Son estos operadores ternarios iguales?  (Leído 127 veces)
Protean

Desconectado Desconectado

Mensajes: 1


Ver Perfil
¿Son estos operadores ternarios iguales?
« en: Hoy a las 05:23 »

Hola, ¿cuáles son las diferencias entre estos?

Código:
  #include <iostream>

int main()
{
    int a = 18, b = 44, total = 0, total2 = 0;

    total += (a % 2 == 0) ? b : 0; //44

    total2 += a % 2 ? b : 0; //0
    a >>= 1;
    b <<= 1;

    printf("%d\n%d", total, total2);

}


En línea

AlexJRGWesker

Desconectado Desconectado

Mensajes: 2



Ver Perfil
Re: ¿Son estos operadores ternarios iguales?
« Respuesta #1 en: Hoy a las 06:12 »

En el caso de la primera variable total estás parametrizando bien, estás indicando una expresión booleana y si se cumple (te da true ya que 18%2 == 0 es cierto), entonces te sale de forma correcta que total = b.

En el caso de la variable total2, no has parametrizado y no da un valor booleano, al final depende de la propia implementación de C en este caso que hace que 18%2 = 0 pero en este caso 0 sería un valor entero no booleano, por lo que lo correcto sería, teniendo en cuenta como esta implementado el lenguaje C, que parametrizarás de forma correcta el valor total2 como en el caso de total, o hacer un casting (bool)(a%2) ? b : 0 . Así haciendo el casting, ya no sale un número entero si no que sale un booleano teniendo en cuenta como está implementado el lenguaje C.

Además también tienes errores en la asignación de a y b, ya que el operador "<<" o ">>" con el igual detrás = es incorrecta, lo cual te sirve para adelantar o retrasar un bit. Mirate eso también.

Al final la solución al problema que tienes lo puedes solucionar haciendo un casting dado como está implementado C y nos cuentas (para que así el 0 resultante sea un booleano y no un entero).

Saludos!  :rolleyes:


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Rnd iguales
Programación Visual Basic
monro 3 2,791 Último mensaje 7 Abril 2010, 21:23 pm
por monro
IPs iguales
Dudas Generales
the_lokadio 9 6,032 Último mensaje 24 Junio 2010, 13:25 pm
por the_lokadio
Error con Operadores ternarios ?
Programación C/C++
Onigiri 9 4,291 Último mensaje 27 Abril 2013, 14:28 pm
por Luz Violeta
Estos son los principales fallos de los operadores que pueden aumentar la ...
Noticias
wolfbcn 0 1,831 Último mensaje 2 Febrero 2018, 02:16 am
por wolfbcn
Estos son los operadores que reciben más reclamaciones
Noticias
wolfbcn 3 1,655 Último mensaje 21 Junio 2019, 13:26 pm
por @XSStringManolo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines