投稿
けい kei0baisoku
サンプルのせいなのか、IF文の「○○かつ△△」の書き方を勘違いしているプログラムをよく見かけます。 (正)○○&&△△ (誤)○○AND△△ ANDを使うのは多分BUTTON()の判定くらいです。専門用語でビット演算子と言うのですが…「かつ」は「&&」なんだな、くらいでいいと思います。 ちなみに、このプログラムは左上を押したら反応させようとしていますが、正しく動きません。&&にすると動きます。 ビット演算子を覚えた人は、何故正しく動かないか考えてみても面白いかも。
14そうだね
プレイ済み
返信[1]
親投稿
プチコンで&&って使えたんですね。試したこと無かったです。勉強になりました!
0そうだね
プレイ済み
返信[2]
親投稿
きゃっきゃ INUNEKO238
自分もちょっと疑問なんですが a and b では0001と01000の比較演算してるから0000になりますが A=1:B=6 (A==1)=真(0001) と (B==6)=真(0001) つまり if (a==1) and (b==6)then という比較であれば問題はないとは思ったのですが。 &&ってのは正確にはどういう意味なんですか。 うちもちょこちょこ不明確な部分があって・・
0そうだね
プレイ済み
返信[3]
親投稿
きゃっきゃ INUNEKO238
ためしに A=19 B=(A==19) PRINT B で、ちゃんとBは1となりました。
0そうだね
プレイ済み
返信[4]
親投稿
ひろきち henahenachoco
どこにも説明がない(と思う)のですが、&&と「または」の || も使えますよね。
0そうだね
プレイ済み
返信[5]
親投稿
けい kei0baisoku
………なんて偉そうなこと言いながら、私もふと疑問に思って調べて初めて、&&があるのを知ったのですが(´ω`) >へたれさん あっ、||の説明忘れてました(^O^;) あります。 情報ですが、実はこっそり公式のスペックページにあるのです(-ω-) http://smileboom.com/special/ptcm3/spec/ そしてよく見ると、整数型は%付けるとかデフォルトは倍精度実数とか二進数書けるとかも、ここにしか書いてないような気がします(^O^)
0そうだね
プレイ済み
返信[6]
親投稿
&&の説明ってたぶん無いですよね? なのでANDで代用する必要があるのかと思ってました。でもあるなら当然&&を使った方がいいですね
0そうだね
プレイ済み
返信[7]
親投稿
なるほど、公式スペックページに書いてあったんですか! それは重要だし共有したい情報ですね!
0そうだね
プレイ済み
返信[8]
親投稿
けい kei0baisoku
>きゃっきゃさん if (a==1) and (b==6)then であれば問題ないですね。結果的には意図通りになります。理解もほぼ網羅してるのではと思います。 &&は 「A && B → AとBが両方ともゼロ以外の時のみ1、それ以外はゼロ」 という挙動の演算子のはずです。(実際に試してはないので、仕様説明からの推測です) だから、ANDで代用してもたいてい正しく動きそうなんですよね。でも完全に大丈夫ではないというこの気持ち悪さ………(-ω-)
0そうだね
プレイ済み
返信[9]
親投稿
きゃっきゃ INUNEKO238
ほほう、なるほど・・ c=(a&&b) で1が取り出せる(はず)のか! ありがとうございます!
0そうだね
プレイ済み
返信[10]
親投稿
ビット演算の意図でのANDと組み合わせなければほぼ問題なないでしょうね。 基本的に比較演算子などは結果が0か1になるので、そのルール上であればビット演算のANDであってもORであっても結果は変わらないと思います。ただビット演算の為のANDが出てくると結果が1とは限らないので両方とも0以外でもANDの結果が1になるとは限らないので、やっぱり&&をちゃんと使った方がいいと思いますね。
0そうだね
プレイ済み
返信[11]
親投稿
けい kei0baisoku
>でんぺんさん そうなんですよ、あんな重要じゃ無さそうなところにひっそりと。 て言うか、知らない人多そうですね(°Д°) 初心者さんはスルーでいいと思いますが、プログラム経験者の人は必須な気がします。 隅から隅まで目を通さないと気が済まないタチが役に立ったようで良かったです(笑)
0そうだね
プレイ済み
返信[12]
親投稿
さいとう AlefZero
横から失礼します。 このBASICにあるかはわかりませんが、Cなどでは論理演算子&&、||には不要な評価を行わない機能があったと思います。 例えばA&&Bという式があったとき、もしAが偽であればBの値を評価せずに結果を返せるので、ANDより応答が早くなります。 ですからCなどでは基本&&を使うのですが
1そうだね
未プレイ
返信[13]
親投稿
>けいさん ですね〜。僕もマニュアルとか命令表は一通り目を落としたんですがそこは見落としてました…。サンプルでもほとんど使ってないですしねー…。 初心者はスルーできるとはいえ、逆に初心者が使い出すと余計に大ハマりしそうな気もするんで、ここはキッチリ指摘して直しておいた方が良さそうな気がします!
0そうだね
プレイ済み
返信[14]
親投稿
きゃっきゃ INUNEKO238
みんなすげえなぁ、Cなんか触った事ないw
0そうだね
プレイ済み
返信[15]
親投稿
けい kei0baisoku
>きゃっきゃさん ええ、そのはずです。 ただ、あまりトリッキーなコードにし過ぎると私も上司に「わかりづれぇよ」と怒られたので、ホドホドにしておくのが良いと思います(^^; きっと、少し先に自分で見返した時も戸惑うと思います。
0そうだね
プレイ済み
返信[16]
親投稿
もやしもどき Pseudomoyashi
Web版ではその箇所(30:BASIC基本仕様)が省かれてますが、一応電子説明書にも書いてありますよ。 また命令一覧ポスターに「ショートカット付き」とありますので(一応実際に確かめてもみました)、さいとうさんのおっしゃる通りパフォーマンス的にいくらかお得になります。
0そうだね
プレイ済み
返信[17]
親投稿
ほしけん Hosiken
「NOT TRUE」がFALSEにならなくてどうしたものかと思ってたんですが、mkIIから「!TRUE」でよかったことを配信数日後に思い出しました。 && もあったのは今このトピックで初めて知りました。これはmkIIには無かったんで、ビット演算と組み合わせるときは () で加工必要がありました。 普通のBASICやプチコンでもmkII以前はANDしかないので、IF で複合している条件にANDを使うこと自体は、特に間違いではないと考えています。
1そうだね
プレイ済み
返信[18]
親投稿
電子説明書にもあったのか…。DL直後に見たはずだけどWEBが出来てから、そっちばかり確認してたので見落としたか…
0そうだね
プレイ済み
返信[19]
親投稿
けい kei0baisoku
>でんぺんさん そうですね~。整数型とか二進数表記とかはいいとしても、ANDで意図と違う結果になったらまず自力で解決は無理そうですしね(-ω-) プチコン三号用の初心者講座で、さりげなく入ってるといいですね(´з`)
0そうだね
プレイ済み
返信[20]
親投稿
けい kei0baisoku
>さいとうさん 情報ありがとうございます! そういえばそんなのもありましたね(^O^) プチコンではどうなんでしょ?スマイルブームさん次第だとは思いますが。 面白そうなんで、検証して分かったら報告してみます(^O^)
0そうだね
プレイ済み
返信[21]
親投稿
けい kei0baisoku
>もやしもどきさん なんと、電子説明書にもあったのですね(^^; 一回見たはずなのに………覚えてない。 高速化にも使えるのですね。試してくださってありがとうございます(^O^)
0そうだね
プレイ済み
返信[22]
親投稿
べー mmmggg
andや&&は論理値という考え方に基づいて出来ています 真と偽の二種類しか値が存在しない世界の考え方です 数で表すと1と0になります IF文などではこの二種類の値があれば困りません ところがプチコンには論理値型というのはありません 代わりに数値型で代用することになります (真,偽)⇒(1,0) (0以外,0)⇒(真,偽) この様に変換して代用します ではまず==は左右が等しければ真、違っていれば偽になる立派な計算です つぎに&&ですがこれは「論理積」といいます、つまり論理値として掛け算をします(0×0=0,0×1=0,1×0=0,1×1=1 ほら掛け算っぽい)、これは左右とも論理値とみなし、結果も論理値になります そしてANDは「ビットごとの論理積」といいます、つまり複数の論理値を各ビットに押し込めてまとめて論理積をとるある意味横着した計算をしてくれる物です
0そうだね
プレイ済み
返信[23]
親投稿
けい kei0baisoku
>ほしけんさん NOT 変数で偽にならない現象は私もつまずきました(-ω-) &&って三号からだったんですね!(°O°) むむぅ、そう言われると最初はANDでもいいのかなと言う気もしてきました。しかし、ANDの方が特殊なので、あるのならはじめから適した方を覚えた方がいい気もしますし………(-ω-)ヌゥ
0そうだね
プレイ済み
返信[24]
親投稿
きゃっきゃ INUNEKO238
なるほどーなんとなくわかってきました。 てことは(a&&b)は「0か1しか入らない」わけじゃないってことですか?
0そうだね
プレイ済み
返信[25]
親投稿
きゃっきゃ INUNEKO238
つけて試せって話だ・・・ ZAZEN BOYSがかっこよすぎてずっと見てたw
0そうだね
プレイ済み
返信[26]
親投稿
TINY TINY-YAROU
ANDを使うこと自体は正しいと思います。 IF UE AND HIDARI THEN のような書き方が特殊であって、 IF UE!=0 AND HIDARI!=0 THEN と書くのが基本の書き方という気がします。 特に初心者の方は「IFの条件式は、比較演算子(==,!=,<>)を入れる」ということを覚えておけば間違いはないと思います。
2そうだね
プレイ済み
返信[27]
親投稿
いもいも imoimo0122
まあ式の結果が真と偽しかない状況においては動作に全く支障はないですね!
0そうだね
プレイ済み
返信[28]
親投稿
けい kei0baisoku
>きゃっきゃさん &&の結果は0か1にしかならないであってますよ(°O°) 詳しくはべーさんが書かれている通りです
0そうだね
プレイ済み
返信[29]
親投稿
けい kei0baisoku
最初の私の書き方だと前作までのやり方をバッサリ否定していて、少々反省しています。 >TINYさん 基本的に比較演算子を入れる、というのは大切ですね(^O^) 「UE!=0で判定できる」ことや「UE AND HIDARI が特殊」であることを判断できるのって、ビットの仕組みを理解した後だと思うので、そうすると結局初心者の人向けだと、&&を使うよう覚えるのがベストなんじゃないかなぁと思ってるのです。
1そうだね
プレイ済み
返信[30]
親投稿
のざらし longyearsago
ビットフラグは大量のフラグを 管理するのに一役買いまぁす! &B で2進数値が書けるので ビットを見た目で理解させたい時は こっちの書き方の方が良いかもです。
0そうだね
プレイ済み
返信[31]
親投稿
けい kei0baisoku
>いもいもさん そうですね。大体大丈夫なんですよね(´ω`) 改めて命令表全部見直して、1以外をIF文に使いそうなのを確認してみました。BUTTON,SPCHR,SPCHK,BGCHKの4つですね。 入門段階の人は、BUTTONさえ気を付ければ大丈夫かな。
0そうだね
プレイ済み
返信[32]
親投稿
けい kei0baisoku
プチコンの歴史的な背景の影響も大きいのではと言う気がします。 これが三作目でなく一作目で、論理演算子が「&&」でなく「AND」、ビット演算子が「AND」ではなく「&」とかだったら、IF文も論理演算子の方に統一されてたんじゃないかなと。
1そうだね
プレイ済み
返信[33]
親投稿
けい kei0baisoku
>のざらしさん フラグのビット管理便利ですよね!(^O^) 仕事でも実際によく使います。 二進数を直接書ける言語って今までほとんど経験無かったので、地味に感動しました(´∀`*)
0そうだね
プレイ済み
返信[34]
親投稿
ひろきち henahenachoco
ちょっと話がそれるかも知れませんが、「while 1」 で無限ループさせるのも、真か偽かを1か0かで返すことを利用してるってことですよね?
0そうだね
プレイ済み
返信[35]
親投稿
プチコンの僕も歴史的背景なんだろうなぁ、とは思います。 ただIF文に論理演算の為のANDと且つの為のANDが混ざると可読性が落ちるので、けいさんの言うように且つのANDはANDで論理演算のANDは&とかの方が良かったとは思います。 IFで0以上(真)に対する省略は他言語も含めると半分常識に近くなってきてるので判断が難しいところです。ただし可読性を損なうレベルでの省略はしない方がいいので、それは判断基準かなと思ってますが。
0そうだね
プレイ済み
返信[36]
親投稿
けい kei0baisoku
>へたれさん そうです。他の言語なら割りと一般的な書き方だと思いますが、正直、実験用なのであまり考えず無意識に書いてました。 丁寧に書くなら WHILE TRUE の方がベターかもしれませんね(´ω`)
0そうだね
プレイ済み
返信[37]
親投稿
けい kei0baisoku
>でんぺんさん そうですね。仕様を知ってるから、の省略って少し慣れると色々ありますねー。 「ゼロ以外=真」のルールも当たり前のように使ってますが、初めての人から見たら「なんで?」ってなりますね………
0そうだね
プレイ済み