Boolean - mkilgore/QB64pe GitHub Wiki

Boolean statements are numerical evaluations that return True (-1 or NOT 0) or False (0) values that can be used in other calculations.

Basic Returns:
  • True evaluations return -1. NOT 0 = -1 in Basic. Can be used to increment a value.
  • For positive True results, subtract it, multiply it by a negative value or use ABS.
  • False evaluations return 0. Watch out for "Division by 0" errors!
Relational Operators:
Symbol Condition Example Usage
<  Less than  IF a < b THEN
>  Greater than  IF a > b THEN
=  Equal  IF a = b THEN
<=  Less than or equal  IF a <= b THEN
>=  Greater than or equal  IF a >= b THEN
<>  NOT equal  IF a <> b THEN
  • When evaluating a True value, an IF value < 0 statement is NOT necessary for return values not 0.
Truth table of the BASIC Logical Operators:
The results of the bitwise logical operations, where A and B are operands, and true or false indicate whether a bit is set or not set:
Operands Logical operations
A B NOT B A AND B A OR B A XOR B A EQV B A IMP B
true true false true true false true true
true false true false true true false false
false true false false true true false true
false false true false false false true true
Relational Operations return negative one (-1, all bits set) and zero (0, no bits set) for true and false, respectively.
This allows relational tests to be inverted and combined using the bitwise logical operations.
Boolean Conditional Operators:
  • AND can be used to add extra conditions to a boolean statement evaluation. Both must be True.
  • OR can be used to add alternate conditions to a boolean statement evaluation. One must be True.
  • Parenthesis are allowed inside of boolean statements to clarify an evaluation.
  • Note that Basic returns -1 for True and 0 for False.
Example 1: Using 2 different boolean evaluations to determine a leap year.
 '' ''
 INPUT "Enter a year greater than 1583: ", annum$
 Y = VAL(annum$)
 leap1 = (Y MOD 4 = 0 AND Y MOD 100 <> 0) OR (Y MOD 400 = 0)
 leap2 = (Y MOD 4 = 0) - (Y MOD 100 = 0) + (Y MOD 400 = 0)
 PRINT "Year = "; annum$, "Leap1 = "; leap1, "Leap2 = "; leap2 '' ''

Explanation: Both boolean evaluations will return -1 if the year is a leap year. It is not simply every four years as many people think. That is checked by the first evaluation (Y MOD 4 = 0) of each. In new century years like 1900 (which was not a leapyear) there is only one leap year every 400 years. 100 is used with MOD to see if there is a remainder. When that is true, the boolean return of that part of the first evaluation will be 0. The second returns -1 (which is actually added). In both evaluations the result of (Y MOD 400 = 0) indicates a century leap year.

Entry year = 2000
leap1 = (-1 AND 0) OR -1 = -1 ' the AND evaluation returns False(0) so the OR value is used.
leap2 = (-1) - (-1) + (-1) = -1 + 1 + -1 = -1
Entry year = 1900
leap1 = (-1 AND 0) OR 0 = 0 OR 0 = 0
leap2 = (-1) - (-1) + (0) = -1 + 1 + 0 = 0
Example 2: Moving an ASCII character using the arrow keys and boolean statements to determine the new coordinate.
cordx% = 40
cordy% = 15

DO...LOOP
oldcordx% = cordx%
oldcordy% = cordy%
p% = SCREEN (function)(cordy%, cordx%) 'get ASCII character code at present position
COLOR 14: LOCATE cordy%, cordx%: PRINT CHR$(178); 'print cursor character to position

WHILE cordx% = oldcordx% AND (boolean) cordy% = oldcordy% AND (boolean) k$ <> CHR$(27)
k$ = INKEY$
cordx% = cordx% + (k$ = (CHR$(0) + "K") AND (boolean) cordx% > 1) + ABS(k$ = (CHR$(0) + "M") AND (boolean) cordx% < 80)
cordy% = cordy% + (k$ = (CHR$(0) + "H") AND (boolean) cordy% > 1) + ABS(k$ = (CHR$(0) + "P") AND (boolean) cordy% < 30)
WEND

COLOR 7: LOCATE oldcordy%, oldcordx%: PRINT CHR$(p%); 'replace overwritten screen characters

LOOP UNTIL k$ = CHR$(27) '' ''
Code by AlgoreIthm

See also:


Navigation:
Go to Keyword Reference - Alphabetical
Go to Keyword Reference - By usage
Go to Main WIKI Page
⚠️ **GitHub.com Fallback** ⚠️