BASICスタンプコマンド
解説5

数値演算子

+、−、*、/

解説
 スタンプBASICは通常のプログラムと同様、和、差、掛ける、割るの演算子が使用できますが、下記注意が必要です。
1、計算は全て整数のみ。バイトデータで0〜255、ワードデータで0〜65535.
2、データの最大値は16ビットでそれ以上の値は切り捨てとなります。
3、負の数字は扱いません。補数計算を行ってください。データビットを反転して1を加えると負の数字になるというのが補数の基本的な計算方法です。補数についての詳細は他の書籍等を参照して下さい。
4、演算はかならず左から右へ行われます。通常のプログラム言語、数学にある、演算子の優先順位(掛ける、割るは和、差より優先順位が高い、等)は存在しません。(スタンプUと2SXはカッコの使用により計算の順序を変えることができます。カッコの中を先に計算します。)

**

解説
16ビット同士の数値の掛け算は桁上がりを生じる可能性が大きく、通常の*演算子による掛け算では上位桁を切り捨てられてしまいます。**演算子はその上位桁の計算結果を求めます。
例えば、$FFFF×$FFFF=$FFFE0001ですが、
W1=$FFFF*$FFFF
W2=$FFFF**$FFFF
この場合W1の内容は$0001、W2は$FFFEになります。

*/

U、2SXのみ

解説
小数点の数値の割り算を行うときに使います。この式の左側の16ビット数値の上位8桁+(下位8桁/256)で、右側の数値を割ることができます。今、5÷2.5を計算したいとします。式は
W1 = 5
*/ $0280 (上位2、下位128/256=0.5)
となります。
またこれは
W1 = 5
*/ (2<< 8+128)
と表すこともできます。

//

解説
 割り算のあまりを求めます。10//3は1(結果は3あまり1だから)になります。

>>、<<

解説
 ビットをシフトさせます。>>はビットを右へ、<<はビットを左へ、指定したビット数だけシフトします。
B1=%11001010
B1=B1>>3
この結果、B1の値は%00011001となります。
右へシフトすると結果は2のN乗分の一(3ビットシフトすると8分の一)、左へシフトすると2のN乗倍の値となります。%00000001を1ビットシフトすると2(2の一乗倍)、2ビットシフトで4(2の二乗倍)・・・となります。

MIN、MAX

解説
MIN
値 MIN リミット
値がリミット以上ならそのまま、値がリミットより小さければ値=リミットにする演算子です。
W1=100
FOR W2=0 TO100
DEBUG ? W1 MIN 50
W1=W1-10
NEXT
このとき、W1の値が50以下になってもW1は50を保持します。つまり結果は100からカウントダウンし、50以下は50が表示されます。(注意スタンプのFOR文はマイナスのSTEPは出来ません)
MAX
値 MAX リミット
値がリミットより大きければ値=リミット、値がリミット以下ならそのままにする演算子です。
FOR W1=0 TO 100 STEP 10
DEBUG ? W1 MAX 50
NEXT
このとき、W1の値が50以上になってもW1は50を保持します。0からカウントアップし、50以上は50になります。

ABS

U、2SXのみ

解説
負の数字を正の数字に修正します。正の数字に使った場合はなにも効果はありません。
W1=-10
W1=ABS W1
W1の中身は10になります。変数を8ビット以下にするとマイナスの数値が扱えないので注意して下さい。

SQR

U、2SXのみ

解説
平方根を求めます。但し、スタンプは整数のみのあつかいなので、結果に小数点以下がある場合は切り捨てとなります。
SQR 99
は9(本当の答えは9.95)になります。

SIN、COS

U、2SXのみ

解説
 サインとコサインを求めます。スタンプの場合、円周を0−255で表現しています。45°=32、90°=64、180°=128、270°=192となります。これらの単位をブレッド(コンピュータ業界では)といい、値1は1.406°に値します。SINおよびCOS関数に値を渡すときはブレッドで渡す必要があります。この変換はブレッド=角度×128÷180で計算できますのでサイン65度を求めたい場合は
W1=SIN(65*128/180)
で求められます。

DIG

U、2SXのみ

文法
変数 DIG 桁数

解説
変数の中の桁数で指定した桁の数値を求めます。
234 DIG 2
は2になります。(0桁目から始まる。0桁=4、1桁=3、2桁=2となる。)

論理演算子

&、|、^、〜

解説
&はAND、|はOR、^はEX−OR、〜はNOTを求めます。$FFFFとのEX−ORを求めることでNOT(全てのビットが反転)を求めることができます。

サンプルプログラム>
b1=%11110001
debug bin8 b1,cr
b1=~b1
debug bin8 b1
反転したビットを表示します。

&/、|/、^/

Tのみ

解説
それぞれNAND、NOR、EX−ORの反転値を求めます。スタンプTのみ。

REV

U、2SXのみ

解説
指定したビットぶんだけ対象値の右側から抜き取り、左右を反対にします。
%11001011 REV 4
は%1101となります。

DCD

U、2SXのみ

解説
指定したビット番号だけを1にします。ビット5を設定したい場合は
W1=DCD 5
この場合W1は%0000000000100000となります。(ビット番号は0から始まる)

NCD

U、2SXのみ

解説
1が入っている一番大きいビット番号+1を結果として返します。

W1=NCD %0000000000000010 W1は2
W1=NCD %0000000100000001 W1は9
W1=NCD 0 W1は0


ロボット作成教室のもくじへBack

Home