Hola
Estaba trabajando con una instrucción if para aplicar una máscara. Primero pego el código para explicarme

#define PAD_BUTTON_A 0x0100
#define PAD_BUTTON_B 0x0200
#define PAD_TRIGGER_Z 0x0010
int buttonsdown; //variable de 32 bits que almacena los botones presionados
...
//Si presiona A y B activa motor del control, buttonsdown vale 0x0300
if((buttonsdown&(PAD_BUTTON_B|PAD_BUTTON_A))==(PAD_BUTTON_B|PAD_BUTTON_A))
motor=1;
//Si presiona A y Z desactiva motor del control, buttonsdown vale 0x0110
if((buttonsdown&(PAD_TRIGGER_Z|PAD_BUTTON_A))==(PAD_TRIGGER_Z|PAD_BUTTON_A))
motor=0;
En el código anterior si se aplica la máscara de A+B (0x0300) sobre buttonsdown (0x0300) y el resultado da 0x0300, entonces el if ejecuta su contenido, no hay problema. En caso contrario no ejecuta su contenido.
Tengo entendido que el contenido de un IF solo se ejecuta si lo que evalúa es diferente a cero, pero si reduzco el código de mi programa a lo siguiente:
if(buttonsdown&(PAD_BUTTON_B|PAD_BUTTON_A))
motor=1;
El contenido ya no se ejecuta. Si se evalúa, el resultado que tiene el if es 0x0300, el cual es diferente a cero, pero el if no hace nada.
¿Cuál es la diferencia? No entiendo porque funciona solo si hago la comparación ==.