Full BASICには2進数に対するビット演算を行う組込関数が用意されていないが,十進BASIC独自拡張の組込関数 bitNOT(a), bitAND(a,b), bitOR(a,b), bitXOR(a,b)を用い,数値を2進数とみなしてビット演算を行うことができる。
Windows版の場合,Ver. 7.5.4以降で対応する。
演算は52ビットの2進数として実行される。有理数モードや十進1000桁モードでは十分な精度を持たない。
また,十進モードでは数値変数の精度が49ビット分しかない。
Microsoft BASICのIMP,EQVは,次のようなDEF文で実現できる。
DEF IMP(a,b)=bitOR(bitNOT(a),b) DEF EQV(a,b)=bitNOT(bitXOR(a,b))
また,AND,OR,XORは予約語ではないので,次のようなDEF文を追加することが許される。
DEF AND(a,b)=bitAND(a,b) DEF OR(a,b)=bitOR(a,b) DEF XOR(a,b)=bitXOR(a,b)
Note. これらの関数を2項演算の形に書くことはできない。
NOT演算(ビット反転)は次のDEF文で代用できる。
DEF bitwiseNOT(a)=-1-a
なお,NOTはFull BASICの予約語なので,関数名をNOTにすることはできない。
純粋にFull BASICの範囲内でビット演算を行いたい場合は,次のような外部関数定義を用いる。
10 DECLARE EXTERNAL FUNCTION bitwiseAND 20 PRINT bitwiseAND(10,12) 30 END 1000 EXTERNAL FUNCTION bitwiseAND(a,b) 1010 DECLARE NUMERIC aa, bb 1020 DECLARE NUMERIC i,c 1030 LET c=0 1040 FOR i=0 TO 31 1050 LET aa=MOD(a,2) 1060 LET a=(a-aa)/2 1070 LET bb=MOD(b,2) 1080 LET b=(b-bb)/2 1090 LET c=c+MIN(aa,bb)*2^i 1100 NEXT i 1110 IF c>=2^31 THEN LET c=c-2^32 1120 LET bitwiseAND=c 1130 END FUNCTION
MIN(aa,bb)の部分は,ORのときはMAX(aa,bb)に,XORのときはMOD(aa+bb,2)に変える。
上例は32ビットの2進数を対象としている。ビット数を変更したいときは,数値の31と32を変える。