func(token5) is not returning 32.
(32 & 32) is non-zero (32, to be exact) and a bitwise-or between a non-zero integer and any other integer can never be zero, regardless of the language you're using.
Either that, or C is processing the bitwise operators in a different order than you think it is, resulting in your parentheses being misplaced, although I can't readily think of any order in which (func(token5) & 32 | func(token5) & 128) could be handled that would produce zero when func(token5) returns 32.