While both Franklin52's and rdcwayx's solutions work for me, neither should, according to POSIX.
If i'm not mistaken, the portable way to write
!$1 || !$2 || !$3 || !$4
is
!($1+0) || !($2+0) || !($3+0) || !($4+0)
to explicitly demand that each field variable be treated as a number.
The standard says that in a boolean context (such as the logical not), if the type is a number, 0 is false and all others are true; if the type is a string, the null string is false and all others are true. There is no conversion of type (as there is when comparing, in which case a 'numeric string' is coerced to a number if the other value is a number). So when a field is "0", that's a true value in a boolean context since it's a non-empty string.
I think I'd just go with an explicit comparison to zero, $i == 0, since it's both clear and portable (the hardcoded number 0 ensures that the field value is treated as a number).
For more detailed info, refer to the 'Expressions in awk' section @ awk
Wow, that's a lot of typing for a little division.