Non-branching check for zero (1 if zero, 0 otherwise):
(a ^ (-a)) >> (sizeof(a)*8 - 1)
If you need an entire mask (e.g., 1111 1111 1111 1111) if zero, then:
-((a ^ (-a)) >> (sizeof(a)*8 - 1))
That works because:
1 0000 0000 0000 0001
-1 1111 1111 1111 1111
and
0 0000 0000 0000 0000
-0 0000 0000 0000 0000
----------------------------------------------------------------------
Scratch/Test Numbers
38756 1001 0111 0110 0100
-38756 0110 1000 1001 1100
or 1111 1111 1111 1100
25000 0110 0001 1010 1000
-25000 1001 1110 0101 1000
or 1111 1111 1111 1000
12 0000 0000 0000 1100
-12 1111 1111 1111 0100
or 1111 1111 1111 1100
0 0000 0000 0000 0000
-0 0000 0000 0000 0000
or 0000 0000 0000 0000
1 0000 0000 0000 0001
-1 1111 1111 1111 1111