NEW  |  HOME  |  OLD

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

NEW  |  HOME  |  OLD

ビット演算

5/4-5
23:39 (DRM) あうち、ビット演算がよく分からなくなってきたぞ…
23:45 (simotsuki) ビット演算はよう分からないまま使ってますw
23:46 (DRM) 使ったらかっこいいなーなんて思って使っていました(((
23:46 (DRM) 実際、あんま理解できてないという
23:47 (Rel) まぁ四則演算で捉えるには少々特殊というか...
23:48 (simotsuki) 大学で一度やったので二進数の定義自体は分かるんですけど、MUGEN上の&処理と|処理がいまいち
23:50 (DRM) XORもよー分からんですw
23:50 (Rel) http://31kei.blog88.fc2.com/blog-entry-153.html
23:50 (vesperAFK) [script]境界の影  二進数とビット演算
23:51 (Rel) http://31kei.blog88.fc2.com/blog-entry-155.html
23:51 (vesperAFK) [script]境界の影  ビットを複数利用して二つ以上の判断
23:51 (simotsuki) というかMUGENで使うには深く理解しなくて良いと思いますw
23:51 (daken) あとはこことかも
23:51 (daken) http://homepage3.nifty.com/andil/mugen/bit.txt
23:51 (vesperAFK) [script]
23:51 (simotsuki) ただ一つの変数で30個オンオフのフラグが使えて
23:52 (simotsuki) var(○) := var(○) | △でオン
23:53 (simotsuki) var(○) := var(○) - (var(○) & △)でオフと考えれば
23:54 (Rel) var(○) := var(○) & (△ ^ -1) でオフもできるます!
23:54 (simotsuki) オフの方法は複数あるみたいですなぁ
23:54 (DRM) oh...('A`)
23:54 (simotsuki) Relさんのやり方の方が多いのかも
23:55 (Rel) var(x) := (var(x) & ((A | B) ^ -1) | B)ってやり方は上手くいかんとです
23:55 (simotsuki) 後は△の部分を倍々して行きながら2の30乗まで使うだけですねw
23:55 (simotsuki) 29乗?まぁそこら辺はどうでもいいかぁ
23:55 (Rel) (AとBオフって後から改めてBだけオンにしたい場合)
23:57 (simotsuki) ただビット演算は()でちゃんと括らないと優先度の問題?か何かでうまく機能しなかったような気もします
23:57 (DRM) それだけは理解してますぜ(
23:57 (Rel) 指数の計算がちゃんと機能してれば直数字指定とか乗算値指定とかしないで済んだのn
23:58 (Rel) mugenだと2の5乗 = 64でしたかな
23:59 (simotsuki) 計算半端なく狂ってますよね~
23:59 (simotsuki) 下がったり上がったりしてたような気もしますしw
00:00 (DRM) http://hc8.seikyou.ne.jp/home/doloop/lec-exp.html
00:00 (vesperAFK) [script]2500loops
00:00 (DRM) 随分とおかしなことになってるんですなぁ・・・
00:02 (DRM) そういやビット演算ってトリガーに使えますかね…?
00:02 (DRM) trigger1 = (var(1) & 2)
00:02 (Rel) 使えます
00:02 (DRM) おー
00:02 (Rel) てか使ってる(´・ω・`)
00:03 (DRM) 上記のやつだとvar(1) = 2と同じっていうことで良いんでしょうか
00:03 (Rel) ノン
00:03 (DRM) おやまぁ...
00:04 (Rel) var(1)の中に2しか入ってなければそういう答えでもいいんですけどそれだとそのトリガーってvar(1)=2で良いですよねって話に(
00:05 (simotsuki) trigger1 = 2 って捉えた方が良いのかな?
00:05 (simotsuki) ちとここら辺私も曖昧w
00:05 (Rel) トリガーの部分はtrigger○ = 0とtrigger○ = 0以外 って考えた方が
00:06 (Rel) 気にするのは0になるかどうかですから
00:06 (simotsuki) とりあえず、var(1) & 2 なら1、!(var(1) & 2) なら0と考えても問題無いはず…
00:07 (Rel) それでもおkです
00:07 (Rel) 計算の部分となると(var(1) & 2) = 2と考えざるを得ませんが
00:07 (DRM) もしかしてvar(1)に4とか入ってても成立するのかしら…
00:08 (Rel) var(1) := (var(1) | 2 | 4) → (var(1) & 2) = 2 , (var(1) & 4) = 4 , (var(1) & 6) = 6
00:08 (Rel) var(1) := (var(1) | 2) → (var(1) & 2) = 2 , (var(1) & 4) = 0 , (var(1) & 6) = 2
00:08 (simotsuki) var(1) = 4 の場合は !(var(1) & 2)になりますね
00:09 (Rel) ですね
00:09 (daken) 4では無理ですな。ええと…2,3,6,7…えーい、面倒くさいw ←がvar(1)に入ってる時も成立しますね>var(1)&2
00:10 (macbeth) えーっと
00:10 (simotsuki) 二進数表記の4は100 なので var(1) & 2 は2番目の0と考えて頂けると分かりやすいと思います
00:10 (macbeth) &2だから2桁目か
00:11 (macbeth) 2=10、3=11、6=111
00:11 (macbeth) 7は1000だから満たさないんじゃない?
00:11 (Rel) 6 = 110
00:11 (macbeth) 6は110か
00:11 (Rel) 1000は8です
00:11 (macbeth) あぁそうか
00:11 (DRM) もしかして&3ってやると3桁目、&4ってやると4桁目が1になっていればONってことでしょうか…?
00:12 (macbeth) そうですね
00:12 (daken) そういうことでござるね
00:12 (DRM) あー、ちょい理解出来たw
00:12 (daken) あ
00:12 (Rel) &4は3桁目です
00:12 (simotsuki) ま、&○の方は
00:12 (daken) すいませんちがった
00:12 (macbeth) あ
00:12 (simotsuki) 倍々じゃないと使えませんので
00:12 (macbeth) 倍々だった
00:12 (DRM) おわわ
00:12 (macbeth) えーっと
00:12 (daken) 2の乗数が、それぞれの桁ですね
00:12 (macbeth) &2が2桁目、&4が3桁目、&8が4桁目
00:12 (simotsuki) 1,2,4,8,16が1,2,3,4,5となりますね
00:13 (Rel) 2の累乗数でない場合は分解して考えないとねぇw
00:13 (macbeth) 2^n-1?
00:13 (DRM) あー、なるほど!2乗かぁ
00:14 (DRM) ×2乗 ○2の乗数orz
00:14 (simotsuki) 30までしか使えないのも、ここが30乗超えると数値が大きくなり過ぎるからですねw
00:14 (Rel) まぁ1024 * 1024 * 4とかでいいんですけどね
00:15 (macbeth) 29まではオバフロしないんだっけ?
00:15 (Rel) 2147483648までですね
00:15 (Rel) これに1足すとオバフロ
00:15 (Rel) だった希ガス
00:16 (daken) 確か…31桁目までが正数で、32桁目が負数(=オバフロ)かな?
00:16 (DRM) 忘れないうちにメモしておかんとな…
00:17 (Rel) 32桁目というか...
00:17 (Rel) 10000000000000000000000000000001になるとオバフロ?
00:17 (Rel) (二進数表記)
00:17 (macbeth) えーっと
00:18 (daken) -2147483648 = 10000000000000000000000000000000 が負の最大値かな?
00:18 (Rel) まぁ2147483649のことです
00:18 (macbeth) 確か8桁が4つだから…
00:18 (daken) で、-1 = 11111111111111111111111111111111 という感じらしいです
00:19 (DRM) ん?256で&9かな...
00:20 (Rel) 256は2の8乗です
00:20 (Rel) 9 = 1001
00:20 (Rel) 256 = 100000000
00:21 (Rel) &は累乗の記号ではないので混同するとあれですお
00:22 (daken) 9桁目を動かしたい = var(xxx) & 256
00:22 (daken) という感じですね
00:22 (Rel) (var(x) & 2の(動かしたい桁目)乗)
00:22 (Rel) みたいな?
00:23 (daken) あ、違うか。&じゃ動かないですねアホか自分。9桁目のON/OFFを判定したい、でした
00:23 (Rel) うん、全く同じ状態になってもうた
00:24 (Rel) (var(x) & 2の(ON/OFFを判定したい桁目)乗)
00:26 (DRM) ふむふむ…皆さん、ご親切にどうもありがとうございますorz 感謝の極みです…
00:26 (daken) まことに残念ながら、もうひとつ訂正が。1桁目が2の0乗なので、正確には「判定したい桁目-1乗」でござるね。重箱突付きになりますが
00:26 (Rel) そういやせやな
00:26 (macbeth) そういえば
00:26 (Rel) 駄犬△
00:27 (macbeth) ましろのAliveが途中からマイナスの極大値になるけど
00:27 (macbeth) あれってビット演算で考えればいいのか
00:27 (macbeth) 要するに超即死で10000000000000000000000000000000にしてやればいいのね
00:28 (macbeth) まぁそのためには128の壁を何とかする必要があるんだけど(
00:28 (Rel) おさらい:(var(x) & 2の(ON/OFFを判定したい桁目-1)乗)
00:29 (Rel) おさらいとか久しぶりに使うんですけど
00:31 (DRM) すいません、DRMって人、とっても頭が悪いんです;
00:31 (Rel) 後はあれやな、応用というか
00:31 (daken) http://hogehoge.tk/tool/number.html
00:31 (vesperAFK) [script]2進数、8進数、10進数、16進数相互変換
00:31 (daken) ここを使って色々眺めてみるとわかりやすいかも?>2進数
00:32 (Rel) (var(x) & 2の((ON/OFFを判定したい桁目その1-1)乗 | (ON/OFFを判定したい桁目その2-1)乗 | (ON/OFFを判定したい桁目その3-1)乗 | (ry))とかできるんやな
00:32 (Rel) やっべ、ズレた
00:33 (daken) やろうと思えばできますねw
00:33 (Rel) (var(x) & (2の(ON/OFFを判定したい桁目その1-1)乗 | 2の(ON/OFFを判定したい桁目その2-1)乗 | 2の(ON/OFFを判定したい桁目その3-1)乗 | (ry))
00:34 (Rel) つまりさっきの(var(x) & 6)みたいなの
00:34 (Rel) (var(x) & 6) = (var(x) & (2 | 4))
00:36 (Rel) 2つ同時にONになってるかどうかならtrigger1 = (var(x) & 6) = 6でおっけーね
01:48 (DRM) んー、var(X)=260だとすると確認方法は(var(X) & 260)=4か(var(X) & 260)=256ってことになるのかな?
01:49 (simotsuki) む?
01:49 (simotsuki) ビット演算の場合は10進数で考えると混乱しますぜぇ
01:50 (simotsuki) var(x)=260の場合は
01:51 (simotsuki) 100000100 と考えるのが良さそうですよ~
01:51 (simotsuki) この場合、var(x) & 4 と var(x) & 256 がオンです
01:51 (DRM) それって3bit目と9bit目が1だから4と256ですよね…?
01:52 (DRM) 4 | 256でしたorz
01:54 (simotsuki) とりあえず、私もなのですが慣れないうちは2の乗数以外は使わない方が良いですw
01:56 (DRM) うへぇOTL
01:57 (simotsuki) 2の乗数だけを使用しても特に劣る事は無いですし、記述が若干長くなるくらい?
01:57 (DRM) var(X)=(4|256)とすると確認方法はtrigger1=(var(X) & 4)=4か(var(X) & 256)=256ってことかしら…
02:00 (simotsuki) いやー深く突っ込まれると実は私もよう分からないのでなんともw
02:00 (simotsuki) トリガーとして使用する際は
02:00 (simotsuki) tigger1 = var(x) & 4 か trigger1 = !(var(x) & 4) の二通りで良いと思いますよ~
02:01 (DRM) ふむ…
02:01 (simotsuki) とにかくビット演算はオンオフしか基本的には扱えませんし
02:02 (DRM) いやぁ、実はステート数が少ないからprevstatenoの代わりに使おうかと思って
02:03 (simotsuki) それはちょっとキツイかもしれませんw
02:03 (DRM) あのステートならオン、このステートならオフみたいな感じでAIに使おうとしてるんですがねぇ…
02:03 (simotsuki) なるほど
02:03 (simotsuki) それならいけるかも
02:04 (simotsuki) stateno = 260ならオンって事ですか?
02:05 (DRM) いや、stateno=200ではvar(1)に8を、stateno=400では128をって感じです
02:06 (DRM) 260ってのは4 | 256 = 260だから出てきた数字ですw
02:07 (simotsuki) 特に数字が8で無ければいけないとか、400だと128じゃないといけないとかは無いですか?
02:07 (DRM) 無いです
02:07 (simotsuki) ならいけそうですなぁ
02:08 (DRM) とりあえずvar(1)には個別ステートで2の乗数を代入して、-1のchangestateのステコンのトリガーで確認しようかと思って
02:09 (simotsuki) [State]
02:09 (simotsuki) type = null
02:09 (simotsuki) trigger1 = var(○) := ifelse(stateno = 100,var(○) | 1,var(○) -(var(○) & 1)) && 0
02:09 (simotsuki) trigger2 = var(○) := ifelse(stateno = 400,var(○) | 2,var(○) -(var(○) & 2)) && 0
02:11 (DRM) あー、それを常時監視でやってもいいってことです?
02:11 (simotsuki) ですです
02:11 (simotsuki) これを入れたら
02:12 (simotsuki) 確認したい所で、trigger1 = var(○) & 1 と使うと
02:12 (simotsuki) stateno = 100なら 1、違うなら0を返す事になります
02:13 (simotsuki) 正確には1じゃないか、ONとOFFですね
02:13 (DRM) おー、なるほど
02:16 (simotsuki) ただ、この場合は1フレームしかprevstatenoとしては使えませんので
02:16 (simotsuki) ちとトリガーを分割して工夫しなきゃいけないかもしれません
02:17 (DRM) 了解です
02:34 (DRM) しかし記述していくのも大変じゃw
02:37 (simotsuki) ですねw
02:37 (simotsuki) 最初の頃は書き直しまくったなぁ
02:37 (DRM) AIは何度も修正してるけど、ここまで構造を根本的に変えるのは…w
02:45 (DRM) あー、ステート少なくて助かったw とりあえず-3に書く作業は終了…

NEW  |  HOME  |  OLD

Comment

コメントの投稿


管理者にだけ表示を許可する

Trackback

http://kyoakumugenirc.blog61.fc2.com/tb.php/1505-bdefe407

NEW  |  HOME  |  OLD

 検索フォーム


 全記事表示リンク

 全記事表示(500件ずつ)


 プロフィール

vesper

Author:vesper

IRCチャンネルの
#凶悪MUGEN
#凶悪MUGEN_雑談
のログからMUGENに関するものを編集・公開しています。
修正した方が良い箇所があった場合は知らせてもらえると助かります。
MUGEN界隈からはリンクフリーです。
その他からのリンクはご遠慮ください。
このブログをリンクに追加

IRCへの入り方などは
IRCに関する記事
をご覧ください。

簡易凶悪MUGEN IRC情報
・ホスト名
 [irc.friend-chat.jp]
・ポート番号
 [6664]
・チャンネル名
 [#凶悪MUGEN]
 [#凶悪MUGEN_雑談]
 (以下はお好みで)
 [#凶悪MUGEN_艦これ]
 [#凶悪MUGEN_スマブラ]
 [#凶悪MUGEN_麻雀]
 [#凶悪MUGEN_緋想天]
 [#凶悪MUGEN_アカツキ]
 [#凶悪MUGEN_小説]
 [#凶悪MUGEN_絵チャ]

・推奨IRCクライアント
 LimeChat2


 カテゴリ

記述の子カテゴリは目安程度に考えてください。

 最新コメント


 最新記事


 カウンター

累計の閲覧者数:

現在の閲覧者数:

 RSSリンクの表示


他ブログ更新情報(最新70件)

仕様上、下記のリンク一覧でサイトリンクにあるサイトはこの一覧に出ません。

Twitter


基礎リンク集


リンク

サイトに断り書きがない限りリンクさせてもらっています。
リンクしてほしくない場合はお気軽におっしゃってください。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。