The reason I ask is because I get expected outputs when I run it either way, so Im just wondering when I should/can use the first snippet and when I shouldnt.
You're grossly mixing bools with numbers. It is well-defined, but it makes the code a lot less readable, and your intentions less clear.
0 != (value1 && value2 && value3)
This is comparing a integer (left hand side) to a boolean (right hand side), but the bool is implicitly cast to an int. I'll expand this out. In C++ boolean logic, 0 is the same thing as false, and a non-zero value is seen as true.
This is equivalent to: false != (value1 != 0.0 && value2 != 0.0 && value3 != 0.0)
Which is equivalent to: true == (value1 != 0.0 && value2 != 0.0 && value3 != 0.0)
Which is equivalent to: (value1 != 0.0 && value2 != 0.0 && value3 != 0.0) (BTW, this is what I would prefer out of what has been given)
Which is equivalent to: (value1 && value2 && value3)