BIT% (number%,bitnr) with bitnr=0..15
All numbers are internally stored as a series of values, each of which can either be 1 or 0 (or, if you prefer, true or false). This is known as the binary system. The set of digits which make up a binary number are known as a stream of bits.
The function BIT% returns the status of a specified bit of an integer number%, a value of either 0 or 1. Bit 0 means the rightmost bit, whereas bit 15 would be the leftmost.
Here is a function which converts a number to the binary system. It allows a greater range than BIN$ and needs just one parameter. The first version needs the REV$ and LOG2 extensions, the second does not.
100 DEFine FuNction BIT$ (x%) 110 LOCal b$,i: b$="" 120 FOR i=0 TO LOG2(ABS(x%)):b$=b$ & BIT%(x%,i) 130 RETurn REV$(b$) 140 END DEFine BIT$
100 DEFine FuNction BIT$ (x%) 110 LOCal b$,i: b$="" 120 FOR i=0 TO LN(ABS(x%))/LN(2): b$=BIT%(x%,i) & b$ 130 RETurn b$ 140 END DEFine BIT$
The following logical function returns 1 (true) if the given parameter was an upper case character, or 0 (false) if it was lower case. This function will work with all international character sets supported on the original QL.
100 DEFine FuNction UPPER% (c$) 110 RETurn NOT BIT%(CODE(c$),5) ^^ BIT%(CODE(c$),7) 120 END DEFine UPPER%
In any given character, bit 5 indicates the case and bit 7 the character set.
The length of a number x in binary form is INT(LOG2 (ABS (x))+1) .