« 【講座】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

口臭チェッカー市場