« 【講座】HSPよく使うフレーズ 第12回 ペイントソフトっぽいもの | メイン | HSPTV!メルマガ 第21号 »
2006年08月17日
【講座】HSPよく使うフレーズ 第13回 &の上手な使い方
さて、今回は前回のおさらいです。
前回の記事に対して、読者の又吉さんと矢野さんから同様のメールを
頂きました。
又吉さんのメールを紹介します。
<又吉さんからのメール>
はじめまして、又吉です。
HSPTV!メルマガ第1号から読ませていただいています。
今回、HSPのスクリプトで解らない所があったので、
質問したいと思います。
[hsptv:00019]の
【講座】HSPよく使うフレーズ 第12回 ペイントソフトっぽいもの
に、紹介されていたスクリプトの
if (key & 512):n=(n+1) & 3
 ̄ ̄ ̄ ̄ ̄ ̄
下線部の、"&"の役割がわかりません。
これは、どういったことを行うのですか。
よかったら、教えてください。
<メールここまで>
「n=(n+1) & 3」ですよねぇ。
ちょっと変わった使い方です。
日本語で書くと、
「nに1を足して、3と論理演算のAND(&)をしたものをnに入れる」と
いう事です。
ここでは”nを1つ増やしたい”という目的と、
”nは最大3まで”という条件があります。
3は2進数で 0000 0011 なので、
nと3を&すると結果は
2進数で
00
01
10
11
のどれかに収まります。
今回の&の使い方は、指定したビットの値を取り出したい、
という場合に使うテクニックです。
ちなみに、変数 & 255 で255までの値を取り出せますが、
変数 & 100 では100までの値を取り出すことはできません。
これは2進数に変換してみるとわかります。
1111 1111 (255=128+64+32+16+8+4+2+1)
0110 0100 (100=0+64+32+0+0+4+0+0)
100だとこのようにとびとびになってしまいます。
論理演算についてはこちら
http://hspcenter.com/hspdt/faq4.html#ronri
また、下位2ビットを取り出す方法はこちらが参考になると思います。
http://hspcenter.com/hspdt/faq4.html#4bit
短いスクリプトを作って実験してみると理解が早いと思うので、
是非試してみてください。
repeat 20
moto=cnt
gosub *bincv
ct=ato
moto=cnt & 3
gosub *bincv
mes ct+" & 00000011="+ato+" ("+cnt+")"
wait 10
loop
stop
*bincv
ato=""
repeat 8
ato=""+(moto & 1)+ato
moto=moto>>1
loop
return
[bincv.hsp / hsp3用]
(うすあじ)
投稿者 usuaji : 2006年08月17日 00:00
口臭チェッカー市場