Commodore‎ > ‎BASIC‎ > ‎Keywords‎ > ‎

NOT

 Keyword Abbreviation Token (hex) Version(s) Classification NOT N{Shift+O} A8 1.0 to 7.0 Operator (5)

NOT expression

 Parameters Type Legal Value(s) Default Value Note(s) expression Float or Integer -32768 to +32767

 Returns Type Value(s) Note(s) result Integer -32768 to +32767 Will be -1 or 0 if expression is 0 or -1

 Purpose
Evaluate a bit-wise boolean operation.

 Remarks
The NOT operator is often used in logical expressions, and may be considered a logical operator.  However, this is not really the case and can have nasty consequences if you're not aware of how it actually functions.  First, if the expression is a string, a TYPE MISMATCH ERROR is generated.  Next, if the expression is floating-point then it is converted to an integer; if the result is not a legal value (see above) then ILLEGAL QUANTITY ERROR is generated.  Finally, each of the 16 bits in the integer is complemented to produce the result.

If the expression is 0 or -1 then the result will be -1 or 0, which is completely logical.  BASIC operators which return a boolean result always return -1 for true or 0 for false so this works well most of the time.  However, using NOT with other non-zero values (besides -1) will produce another non-zero value.  This is not logical, which is why this is more properly called a bit-wise boolean operation.  Examples are provided below, but to really understand them, you need to know how to convert a decimal number into binary (and back again).  I won't try to explain that here; you may find this web page helpful for experimenting, or use a calculator.

Also important to note is that logical and bit-wise negation (discussed on this page) are different (though similar) to comparison for inequality; see the less and more operators (< and >).

The NOT operator has a very low operator priority (5), which is less than all arithmetic and relational operators.  Its priority, however, is greater than the AND and OR bit-wise operators.  Of course the user may invoke parentheses to change the order of evaluation.

Boolean/Logical operators (like NOTl) are often used with IF, DO, and LOOP.

Some "logical" examples:
 ```PRINT NOT "A" ?TYPE MISMATCH ERROR READY. A=1 : B=2 READY. PRINT NOT A>B -1 READY. PRINT NOT A

 ```A=1 : B=2 : PRINT NOT AB 0 READY. PRINT NOT (AB) -1 READY. ```

Some examples demonstrating bit-wise complement:
 ```A=1 : REM binary 0000 0000 0000 0001 READY. PRINT NOT A -2 : REM binary 1111 1111 1111 1110 -- not logical! READY. PRINT (NOT A) AND A <>0 : REM the () are unneccessary -2 : REM also not logical, because of NOT A READY. ```

 Compare With
<, >, -, XOR

 Contrast With
+, =