NOT

From QB64 Phoenix Edition Wiki
Revision as of 12:34, 5 June 2022 by RhoSigma (talk | contribs)
Jump to navigation Jump to search

NOT is a boolean logical operator that will change a false statement to a true one and vice-versa.


Syntax

True = -1: False = NOT True


Description

  • In QBasic, True = -1 and False = 0 in boolean logic and evaluation statements.
  • NOT evaluates a value and returns the bitwise opposite, meaning that NOT 0 = -1.
  • Often called a negative logic operator, it returns the opposite of a value as true or false.
  • Values are changed by their bit values so that each bit is changed to the opposite of on or off. See example 3 below.


Template:RelationalTable


Template:LogicalTruthTable


Examples

Example 1: Alternating between two conditions in a program loop.

DO
switch = NOT switch       'NOT changes value from -1 to 0 and vice-versa
LOCATE 10, 38
IF switch THEN PRINT "True!" ELSE PRINT "False"
SLEEP
k$ = INKEY$
LOOP UNTIL k$ = CHR$(27) ' escape key quit


Example 2: Reading a file until it reaches the End Of File.

DO WHILE NOT EOF(1)
  INPUT #1, data1, data2, data3
LOOP  
Explanation: EOF will return 0 until a file ends. NOT converts 0 to -1 so that the loop continues to run. When EOF becomes -1, NOT converts it to 0 to end the loop.


Example 3: So why does NOT 5 = -6? Because NOT changes every bit of a value into the opposite:

PRINT NOT 5
PRINT
ReadBits 5
ReadBits -6

SUB ReadBits (n AS INTEGER) 'change type value and i bit reads for other whole type values
FOR i = 15 TO 0 STEP -1 'see the 16 bit values
    IF n AND 2 ^ i THEN PRINT "1"; ELSE PRINT "0";
NEXT
PRINT
END SUB  
-6

0000000000000101
1111111111111010
Explanation: The bit values of an INTEGER are 2 _BYTEs and each bit is an exponent of 2 from 15 to 0 (16 bits). Thus comparing the numerical value with those exponents using AND reveals the bit values as "1" for bits on or "0" for bits off as text.
QB64 can use &B to convert the above _BIT values back to INTEGER or _BYTE values as shown below:
'16 bit INTEGER values from -32768 to 32767
a% = &B0000000000000101
PRINT a%
b% = &B1111111111111010
PRINT b%
'8 bit BYTE values from -128 to 127
a%% = &B00000101
PRINT a%%
b%% = &B11111010
PRINT b%%


See also



Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage