A number may be expressed in binary form in SmileBasic by using the prefix &B
. For a numeric literal, &b
is converted to &B
, so for example PRINT &b100
gives 8
, but PRINT VAL("&b100")
gives Syntax error (VAL)
. Another difference between the way &B
is handled in literals and in VAL
is that VAL
does not require any digits to follow: PRINT &B
makes a Syntax error
, but PRINT VAL("&B")
gives 0
.
If more than 20 bits follow the prefix in a literal, the system will generate a Syntax error
, even if the first bits are 0
and the value is within SmileBasic's range. If more than 20 bits follow the prefix in a string passed to VAL
, the system instead generates an Overflow (VAL)
error, again even if the value is within SmileBasic's range. The values &B10000000000000000000
to &B11111111111111111111
give negative numbers in the standard 2s complement sense, and &B10000000000000000000
in particular is a value which exposes some bugs in SmileBasic.
In some instances, it is not necessary to put a space between the end of the literal and the following operator, e.g. PRINT &B1+&B1
will give 2
as expected, but in others, it is necessary, e.g. PRINT &B1OR&B1
gives the confusing result 101
, and the assignment V=&B1OR&B1
generates a Syntax Error
. The commands PRINT &B1 OR&B1
and V=&B1 OR&B1
will give the expected results.
The prefix for hexadecimal values is &H
.