You can think of x && y || z as equivalent to: int func (int x, int y, int z) { if (x) { if (y) { return true; } } if (z) { return true; } return false; } Since both x and y are fixed to be non-zero values the first return statement is always hit. thats what i think