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!
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.
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:
| ||||||||||||||||||||||||||||||||||||||||||||||||
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. |
- 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.
'' '' 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
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) '' '' |
See also:
Navigation:
Go to Keyword Reference - Alphabetical
Go to Keyword Reference - By usage
Go to Main WIKI Page