コミュニティアイコン プチコン 非公式コミュニティ プレイ日記

アバター
アオタク ◆6Tx4tgOERFcr
2019/7/31 15:23
ようやくビット演算のことが分かってきた...。
BUTTON命令やINKEY$命令の時は、なるべくビット演算を使うようにしたほうが良いのかな?

コメント

アバター
Na 2019/7/31 20:11 ◆QoELVrBXBQCI
そういえば非公式初心者講座は第17章「ビット演算の実習」がまだできていませんね...
mkII用ですがこちらが参考になるかもしれません。
https://smileboom.com/special/ptcm2/co_konnichiwa/p17.php

ビット演算のメリットですかー...
よっぽど複雑なプログラムでない限り、メリットは少ないんじゃないかと。
普通にゲームとか作ってる限りでは、(BUTTON命令を除いて)ビット演算を使わなくてもできますし。
あとプチコン4ではBUTTON命令にビット演算がいらなくなりましたね。
例えば3号で IF BUTTON() AND #A THEN と書いていたのが、
4では IF BUTTON(0,#B_RRIGHT,0) THEN となります。
(#B_RRIGHTはAボタンのこと)
アバター
アオタク 2019/7/31 23:07 ◆6Tx4tgOERFcr
>>Naさん
はい、未完成部分はmk2のほうを見て学習しました。
あー、メリットは割と薄いんですね。でも習得はバッチリしておいたほうが良い...でしょうか?
4号の新コマンドは見てて訳が分かりませんww4号を持っていたらある程度分かるかもだけど...()
アバター
アオタク 2019/8/1 0:03 ◆6Tx4tgOERFcr
今気付いたけど...
IF Ao==1 AND Na==2 THEN ---
という形式のIF文も、ビット演算の考え方だったのか。全部1か0に置き換わるからなぁ。
アバター
アオタク 2019/8/1 0:35 ◆6Tx4tgOERFcr
脱線するけど、
整数しか代入しない変数は、全て「%」をつけた整数型にしたほうが良いんですか?
(公式講座には、実数型が1メモリ64バイト、整数型が1メモリ32バイトとか書いてあるから気になった。メモリだったかは覚えてないけど)
プログラム自体の容量も削減されますか?
アバター
アオタク 2019/8/1 0:49 ◆6Tx4tgOERFcr
1メモリ○○バイト、ではなく数値1つあたり○○ビットでした。
(バイトという間違いはでかい)
アバター
アオタク 2019/8/1 0:53 ◆6Tx4tgOERFcr
おっと...、再訂正。
(編集の仕方がよく分かりません)

1メモリ○○バイト、ではなく数値1つあたり○○ビット「のメモリを消費する」です。
細かく気にしすぎかな
アバター
Na 2019/8/1 14:24 ◆QoELVrBXBQCI
>でも習得はバッチリしておいたほうが良い...でしょうか?
そうですね。いつか役に立つかもしれませんし。

>全て「%」をつけた整数型にしたほうが良いんですか?
普通に考えたらそうなんですが、プチコンではつけてもつけなくても速度はあまり変わりませんし、どちらでもいいと思います。
自分はいつもつけていません。
ちなみにすべての変数を整数型にする「OPTION DEFINT」という命令もあります。

>プログラム自体の容量も削減されますか?
されません。細かく言うと「%」が1文字増えるので1バイト多くなりますね。
メモリというのは実行中に変数を保存しておく場所のことです。
普通はメモリが足らなくなることなんてないと思いますので、64ビットでも32ビットでも大した影響はないでしょう。

あと編集は右下の「編集」ボタン→「編集する」を選択→「送信する」→書き換える→「編集する」でできます。
アバター
アオタク 2019/8/1 15:14 ◆6Tx4tgOERFcr
>>Naさん
ならば頑張って習得します!

そもそもプチコンは高速なので特に気にする必要は無い、という訳ですね。「OPTION DEFINT」でデフォを整数型にすると楽なんですか...。ほぉ...。
(でも知ってしまうとこだわりたくなってしまう自分がいる)
メモリは結局変数(の格納関連)のことだったんですか、そうなれば「%」が付くほど容量は大きくなりますね...。でも「OPTION DEFINT」で1つにまとめて(?)しまえばそれ(「%」による容量増加)も抑えられるんですか?
(日本語ってキレイにまとめるの難しい)
ところでOPTION系命令の引数(?????)は2種類あるようですが、他人のプログラムを覗いているとどちらも使っているのを見ることがあります。つまり2つを重ねられる、ということですか?
(引数なのかなあれ)

その編集ボタンが見当たらないです><




もはや日本語崩壊。
アバター
Na 2019/8/1 15:35 ◆QoELVrBXBQCI
>「OPTION DEFINT」で1つにまとめて(?)しまえばそれ(「%」による容量増加)も抑えられるんですか?
いやプログラムの容量って文字数のことですから「%」は1文字ですし「OPTION DEFINT」は13文字ですよ。
文字数なんか気にし始めたら変数は全部1文字にした方が容量少ない、とかそういう話になってしまいますよ。
自分はOPTIONも使わず全部実数型にしちゃいますけどね。

>OPTION系命令の引数(?????)は2種類あるようですが、〜つまり2つを重ねられる、ということですか?
そうですね。

>その編集ボタンが見当たらないです><
上の画像のようなボタンありませんか?
ログインしてないのでは?
アバター
アオタク 2019/8/1 16:04 ◆6Tx4tgOERFcr
>>Naさん
あ、「%」の数が「OPTION DEFINT」の文字数を超える時、と付けるのを忘れていました。

フィルタ回避で無理矢理来ているせいなのかログインが出来ない訳なんです><
アバター
アオタク 2019/8/1 16:22 ◆6Tx4tgOERFcr
「OPTION STRICT」の使用目的が分かりません
アバター
Na 2019/8/1 16:49 ◆QoELVrBXBQCI
自分はあまり使わないのでわかりませんが、
変数名の打ち間違いを防ぐためとか?
OPTION STRICTなしだと変数名を間違えても別の変数として扱われますが、
OPTION STRICTをするとエラーを出してくれるので、間違いに気づきやすいです。
変数を宣言するというのはこういうことです。
例)
OPTION STRICT
VAR AAAAAAA 'ここで宣言
AAAAAAA=5
AAAAAAAA=8 '宣言してない変数なのでエラー
アバター
アオタク 2019/8/1 17:04 ◆6Tx4tgOERFcr
>>Naさん
なるほど、バグを未然に防ぐ目的がメインだったんですね。
アバター
ツララ 2019/8/4 10:06 ◆ArUdBYOYME1V
ビット演算すると変数名に%とか付けてなくても演算結果は自動的に整数(小数点以下切り捨て)になりますよ。

あと処理速度に関してだと、複数の論理演算を一回のビット演算に置き換えるように書くと
理論的にパフォーマンスが32倍稼げるってことなんじゃないんです?

それと、変数の型が影響するのって、処理速度よりも使用できる変数の数の方が影響あるんじゃないんですかね。
FREEMEMで使用可能メモリの残量表示して比較してみれば分かりますけど
整数型にすると実数型の時の倍の数使えるので、例えば
3号でグラフィック画面丸々一枚を配列に格納すると要素数は2^9の二乗で2^18
これ実数型だとギリギリなんですけど、整数型にするとサイズが半分になるので
2枚分のメモリを確保できたりしますし。
画像を扱うプログラム作ってる人だとOut of memoryを何回も出して体感的に分かってる感じ。
アバター
アオタク 2019/8/4 21:02 ◆6Tx4tgOERFcr
>>ツララさん
詳しく説明していただき本当にありがとうございます。
プログラムを作る上で変数は欠かせない存在なので、整数型だと使える量が多くなることが大きなメリット、という訳ですね!
サイズを半減することでも倍のメモリを確保出来るのが確かに大きいですね。
今まで画像やグラフィックなどには全然こだわっていなかったためこれからはこれらも活用出来るよう頑張ります。
アバター
あまさとしおん 2019/8/6 19:02 ◆mzDKTVUAtwqE
なんか整数型の話になってるので一言
同じプチコンでも3号・BIGと4で「型の扱い」が全然違うのでそこがすごく注意が必要です

はじめて触るなら3号・BIGの方が「型の扱い」が混乱しにくい仕様になっています。

3号・BIG→普通の変数と配列変数で同じルール(付いてる記号で型が決まる)
4→配列変数は3号と同じルールだけど、普通の変数は付いてる記号を無視して何でも入る!

A$=128*2
3号→エラー
4→何事もなく動く

A%=1000.1
3号→自動で整数変換(小数点以下切り捨て)
4→1000.1のまま(もちろんメモリの消費量も実数型と同じ!)

4では3号よりも使えるメモリが約16倍あるのでメモリ不足の心配は無用ですけど
『%がついてるのに整数じゃない!』というような現象が起きるのは、4の悪い仕様だと思います
アバター
アオタク 2019/8/7 1:28 ◆6Tx4tgOERFcr
>>あまさとしおんさん
そんなに大きな違いが......。

「何でも入る」からこそのデメリットなんですね。
アバター
高原のな 2019/8/7 6:22 ◆bY8RViwvoODw
先ほど別のトピックにコメントをしながら気が付いたことですが、ビット演算を理解していると、「IFが0か否かで判断分岐する性質を利用しつつANDやORとかをつなげて見かけ上簡単に書いた条件文」が変な挙動をしているなと思った時に原因に気付けるかどうかの差がつきそうだと思いました。

変な例ですが、プチコン3号で下記のコードを実行すると
C=0
WHILE 1
VSYNC 1
INC C
IF RND(4) THEN ?"A";
IF C>=60 AND RND(4) THEN ?"B";
WEND
1フレームごとに、3/4の確率でA、60フレーム以上経過後から「1/2」の確率でBが追記されます。
Aが3/4の確率で表示される理由は、IF文は0か否かで判断し、0でないならTHEN以下を実行するからです。
どうしてBが表示される確率が1/2なのかはビット演算で説明がつきます(60フレーム以上経過した時C>=60は1、RND(4)の最下位ビットが1になる確率は1/2。ANDで結んでいるので両方が1になった時条件成立なので)。

よっぽどこんなのに出くわすことはないとは思いますが、間違いに気づくためにもビット演算を覚えておいて損はないと思います。
アバター
アオタク 2019/8/7 9:27 ◆6Tx4tgOERFcr
>>高原のな
複雑ですね...()
アバター
アオタク 2019/8/8 14:30 ◆6Tx4tgOERFcr
あっ...名前をコピペした後「さん」と付け加えるのを忘れてました...。
本当に申し訳ございません。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -