HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0327
halapeco論理積について3解決


halapeco

リンク

2007/3/27(Tue) 23:24:49|NO.6607

こんばんは。初歩的な質問で失礼いたします。
HSPクックブックの15パズルに

;nyには0〜3、bはランダムに0〜2の数字が入ります。 cy=(ny+b+1)&3
という式が出てきます。
ny+b+1が3の時、cyに1が入るのかと思ったのですが、実際は0〜3の数字が入ります。
ny+b+1の結果の下位ビットが00〜11を指しますが、それがcyに代入されているのでしょうか。
そうなると&3はどういう意味があるのでしょうか。
論理積で検索しても、比較する双方が真の時以外は偽となる、という説明しか見つけられず
理解の助けにはなりませんでした。
初歩的な質問で申し訳ありませんが、どうぞよろしくお願いします。



この記事に返信する


Irisawa

リンク

2007/3/27(Tue) 23:46:23|NO.6610

HSPの&演算子はビット演算子(ビット単位で演算する演算子)です。
以下のように考えると分かりやすいでしょうか。


6 & 10 = 2 0b0110 = 6 & 0b1010 = 10 ------------- 0b0010 = 2 5 & 12 = 4 0b0101 = 5 & 0b1100 = 12 ------------- 0b0100 = 4 5 & 3 = 1 0b0101 = 5 & 0b0011 = 3 ------------- 0b0001 = 1

つまり両方のビットが立っている場合は1、それ以外は0になります。
これって、意外と分かりにくいんですよね。



KIMU

リンク

2007/3/27(Tue) 23:47:23|NO.6613

>論理積で検索しても、比較する双方が真の時以外は偽となる、という説明しか見つけられず
答えそのものです。

双方が1の時以外は0になる

mes "0&0 = "+str(0&0) mes "1&0 = "+str(1&0) mes "0&1 = "+str(0&1) mes "1&1 = "+str(1&1) mes "2&3 = "+str(%10&%11) mes "4&3 = "+str(%100&%011)
とかやれば簡単に理解できると思う



halapeco

リンク

2007/3/28(Wed) 02:29:53|NO.6620

Irisawaさん、KIMUさん、レスありがとうございます。

論理積の説明通りやっても合わなかったので、別の解釈があるのだろうと思い書き込んだのですが、
比較対象の3を二進数にする時に100と勘違いしていたのが原因でした。

レスをいただけなかったら再度この方法を試そうと思わなかったと思います。
どうもありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.