Compatible with:
DOS Maximite CMM MM150 MM170 MM+ MMX Picromite ArmiteL4
Armite F4 ArmiteH7 Picomite CMM2
The following operators are listed in order of precedence. Operators that are
on the same level (for example +
and -) are processed with a left to right precedence as they occur on the
program line.
Numeric Operators (Float or Integer)
NOT INV | NOT will invert the logical value on the right. INV will perform a bitwise inversion of the value on the right. Both of these have the highest precedence so if the value being operated on is an expression it should be surrounded by brackets. For example, IF NOT (A = 3 OR A = 8) THEN … |
^ | Exponentiation (eg, b^n means b raised to the power n) |
* / \ MOD | Multiplication, division, integer division and modulus (remainder) |
+ - | Addition and subtraction |
x << y x >> y | These operate in a special way. << means that the
value returned will be the value of x shifted by y bits to the left while
>> means the same only right shifted. They are integer functions and any bits shifted off are discarded. For a right shift any bits introduced are set to zero. For a left shift any bits introduced are set to zero. |
x >>> y | For a right shift any bits introduced are set to the value of the top bit (bit 63). (CMM2 and Armite H7 only) |
<> < > <= =< >= => | Inequality, less than, greater than, less than or equal to, less than or equal to (alternative version), greater than or equal to, greater than or equal to (alternative version) |
= | Equality (also used in assignment to a variable, eg implied LET). |
AND OR XOR | Conjunction, disjunction, exclusive or. These are bitwise operators and can be used on 64-bit unsigned integers. |
The operators AND, OR and XOR are integer bitwise operators. For example
PRINT (3 AND 6) will output 2.
The other logical operations result in the integer 0 (zero) for false and 1 for
true.
For example the statement PRINT 4 >= 5 will print the number zero on the
output and the expression A = 3 > 2 will store +1 in A.
String Operators
+ | Join two strings |
<> < > <= =< >= => | Inequality, less than, greater than, less than or equal to, less than or equal to (alternative version), greater than or equal to, greater than or equal to (alternative version). |
= | Equality |
String comparisons respect the case of the characters (ie "A" is greater than "a").
The shift operators should only be used with Integers. Floats will give unreliable results.
DIM INTEGER x, y, z, w
x = 12345
y = x << 8
z = x >> 8
w = x >>> 8 ' not all versions have this operator
PRINT "x = ";BIN$(x,64);" ";x
PRINT "x << 8= ";BIN$(y,64);" ";y
PRINT
PRINT "x = ";BIN$(x,64);" ";x
PRINT "x >> 8= ";BIN$(z,64);" ";z
PRINT "x >>>8= ";BIN$(w,64);" ";w
PRINT
x = &h7FFFFFFFFFFF7F
y = x << 8
z = x >> 8
w = x >>> 8
PRINT "x = ";BIN$(x,64);" ";x
PRINT "x << 8= ";BIN$(y,64);" ";y
y = x << 9
PRINT "x << 9= ";BIN$(y,64);" ";y
PRINT
PRINT "x = ";BIN$(x,64);" ";x
PRINT "x >> 8= ";BIN$(z,64);" ";z
PRINT "x >>>8= ";BIN$(w,64);" ";w
PRINT
x = 0-&h7FFFFFFFFFFF7F
y = x << 8
z = x >> 8
w = x >>> 8
PRINT "x = ";BIN$(x,64);" ";x
PRINT "x << 8= ";BIN$(y,64);" ";y
y = x << 9
PRINT "x << 9= ";BIN$(y,64);" ";y
PRINT
PRINT "x = ";BIN$(x,64);" ";x
PRINT "x >> 8= ";BIN$(z,64);" ";z
PRINT "x >>>8= ";BIN$(w,64);" ";w
PRINT
Output:
x =
0000000000000000000000000000000000000000000000000011000000111001 12345
x << 8= 0000000000000000000000000000000000000000001100000011100100000000
3160320
x =
0000000000000000000000000000000000000000000000000011000000111001 12345
x >> 8= 0000000000000000000000000000000000000000000000000000000000110000
48
x >>>8=
0000000000000000000000000000000000000000000000000000000000110000 48
x =
0000000001111111111111111111111111111111111111111111111101111111
36028797018963839
x << 8= 0111111111111111111111111111111111111111111111110111111100000000
9223372036854742784
x << 9= 1111111111111111111111111111111111111111111111101111111000000000
-66048
x =
0000000001111111111111111111111111111111111111111111111101111111
36028797018963839
x >> 8= 0000000000000000011111111111111111111111111111111111111111111111
140737488355327
x >>>8=
0000000000000000011111111111111111111111111111111111111111111111
140737488355327
x =
1111111110000000000000000000000000000000000000000000000010000001
-36028797018963839
x << 8= 1000000000000000000000000000000000000000000000001000000100000000
-9223372036854742784
x << 9= 0000000000000000000000000000000000000000000000010000001000000000
66048
x =
1111111110000000000000000000000000000000000000000000000010000001
-36028797018963839
x >> 8= 0000000011111111100000000000000000000000000000000000000000000000
71916856549572608
x >>>8=
1111111111111111100000000000000000000000000000000000000000000000
-140737488355328
NOT vs INV
'
OPTION EXPLICIT
OPTION DEFAULT INTEGER
DIM a = 99, b = 9
' NOT is used for logical expressions
IF a=b THEN
PRINT "equal"
ELSE
PRINT "Not equal"
ENDIF
IF NOT (a=b) THEN
PRINT "Not equal"
ENDIF
' INV is used for bitwise NOT.
PRINT BIN$(a,64)
b = INV a
PRINT BIN$(b,64)
PRINT a, b
Output:
> RUN Not equal Not equal 0000000000000000000000000000000000000000000000000000000001100011 1111111111111111111111111111111111111111111111111111111110011100 99 -100 >
Last edited: 11 August, 2022