The behavior of the
not operator distributed over an
and or
or expression in boolean algebra (basically
and and
or are swapped after the distribution):
not(a and b) <-> (not a) or (not b)
not(a or b) <-> (not a) and (not b)
Experienced programmers know these laws intuitively in using them to rewrite conditionals, although they may completely forget the name of these laws, or even that the laws are named.
Hardware engineers never forget even so much as the name; they're too central to digital logic.
http://en.wikipedia.org/wiki/De_Morgan%27s_Laws for description
See
BooleanLogic,
LadderLogic