The word
NOT
was originally provided in Forth as a
flag operator to make control structures readable. Under its
intended usage the following two definitions would produce
identical results:
This was common usage prior to the Forth-83 Standard which
redefined
NOT
as a cell-wide one's-complement
operation, functionally equivalent to the phrase
-1
XOR. At the same time, the data type manipulated by
this word was changed from a flag to a cell-wide collection of
bits and the standard value for true was changed from "1"
(rightmost bit only set) to "-1" (all bits set). As these
definitions of
TRUE and
NOT
were incompatible
with their previous definitions, many Forth users continue to
rely on the old definitions. Hence both versions are in common
use.
Therefore, usage of
NOT
cannot be standardized at
this time. The two traditional meanings of
NOT
—
that of negating the sense of a flag and that of doing a one's
complement operation — are made available by
0= and
INVERT, respectively.