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!
