ついでなのでベンチも更新しとくね。
mes "wait..."
wait 100
mv=5
t1=time()
repeat 2000000
stick a,15,1
px+=(((a&%0100)!0)-((a&%0001)!0))*mv: py+=(((a&%1000)!0)-((a&%0010)!0))*mv
loop
t2=time(): mes "論理式:"+(t2-t1)
t1=time()
repeat 2000000
stick a,15,1
if a&1:px-=mv
if a&2:py-=mv
if a&4:px+=mv
if a&8:py+=mv
loop
t2=time(): mes "IF文:"+(t2-t1)
mes "ok"
stop
#defcfunc time
return (gettime(5)*60000)+(gettime(6)*1000)+gettime(7)
カーソルキー全押しだと px-=mv 等の処理が発生するのでifの負け。
何も押してないと論理式の勝ち。
でも200万回ループの結果ですから、誤差みたいなもんです。
大昔のBASICではこの誤差みたいな速度差が問題になることがあったので
速度を安定させる意味でも論理式にしていただけです。
(操作をしてるときだけ僅かに遅くなるので処理落ちしてるように感じる事があった)
今の環境(HSP)では余裕があって await でウエイトを入れてるわけですから
実用上はあまり気にする必要は無さそうです。