Skip to content

Operators

Operators built into the twinBASIC language. They are understood by the compiler and are not declared or defined in the runtime library.

Arithmetic

  • + -- addition; with String operands, concatenation
  • - -- subtraction; as a unary operator, negation
  • * -- multiplication
  • / -- floating-point division
  • \ -- integer division (truncating)
  • Mod -- divides two numbers and returns only the remainder
  • ^ -- exponentiation

Concatenation

  • & -- forces string concatenation, regardless of operand types

Comparison

  • Comparison operators (=, <>, <, <=, >, >=) -- numeric or string comparison
  • Like -- wildcard / pattern-matching comparison
  • Is -- compares two object references for identity
  • IsNot -- (twinBASIC) the logical inverse of Is

Bitwise

Both operands are always evaluated. Booleans are treated as integers: True = -1, False = 0.

  • And -- bitwise conjunction
  • Or -- bitwise disjunction
  • Not -- bitwise negation
  • Xor -- bitwise exclusive-or
  • Eqv -- bitwise equivalence
  • Imp -- bitwise implication

Logical Short-Circuit

The right operand is evaluated only when the left operand does not already determine the result.

  • AndAlso -- (twinBASIC) short-circuit conjunction; evaluates the right operand only if the left is True
  • OrElse -- (twinBASIC) short-circuit disjunction; evaluates the right operand only if the left is False

Bitshift

(twinBASIC) Shifts are logical --- vacated bits are filled with zero, and shifts past the operand's width yield 0 rather than wrapping.

  • << -- (twinBASIC) shifts a numeric value left by a given number of bits
  • >> -- (twinBASIC) shifts a numeric value right by a given number of bits

Object Identity

  • Is -- compares two object references for identity
  • IsNot -- (twinBASIC) the logical inverse of Is

Compound Assignment

(twinBASIC) For most arithmetic, concatenation, and bitshift operators, twinBASIC provides a compound form op= that combines the operation with assignment. x op= y is equivalent to x = x op y, but evaluates the left-hand side only once and is a statement rather than an expression.

OperatorCompound formEquivalent to
++=x = x + y
--=x = x - y
**=x = x * y
//=x = x / y
\\=x = x \ y
^^=x = x ^ y
&&=x = x & y
<<<<=x = x << y
>>>>=x = x >> y

There is no compound form for Mod, or for any of the logical / comparison operators.

Function Pointers

  • AddressOf -- produces a typed function-pointer to a procedure

Operator Precedence

When several operations occur in an expression, each part is evaluated in a fixed order. Arithmetic operators are evaluated first, comparison operators next, and logical operators last. Parentheses override the default order.

Within each category, the order from highest to lowest precedence is:

ArithmeticComparisonLogical
Exponentiation (^)Equality (=)Not
Unary negation (-)Inequality (<>)And, AndAlso
Multiplication and division (*, /)Less than (<)Or, OrElse
Integer division (\)Greater than (>)Xor
Modulus (Mod)Less than or equal to (<=)Eqv
Addition and subtraction (+, -)Greater than or equal to (>=)Imp
String concatenation (&)Like, Is, IsNot
Bitshift (<<, >>)

Comparison operators all have equal precedence and evaluate left-to-right. Multiplication and division also evaluate left-to-right when they appear together, as do addition and subtraction. The & operator is not strictly arithmetic, but in precedence it follows all arithmetic operators and precedes all comparison operators.

The compound-assignment operators (+=, -=, *=, /=, ^=, &=, <<=, >>=) appear only at statement level --- they are not part of any expression, so they do not participate in precedence.

twinBASIC and LOGO copyright of "WaynePhillipsEA" author