質問: (<<1) & 0xeeeeなどが分かりません 日本語でプログラミングができる有料のゲーム作成用ソフトを使っています。 変数操作と条件分岐は実装されていますが、配列が実装されていません。 16進数も2進数も実装されていないため、2進数を10進数に直して計算していますが、 立っているビットを全部大きい方から数えるプログラムまではできましたが、 これからオセロの着手可能な場所を探して石を反転する処理を作る時に、自分の作ったプログラムでは頭が混乱したため、ネットで見つけた「反転する石を計算」を使ってみたいと思いました。 下の計算式を自分で作りたいですが分からない所を教えて下さい。 盤面で白黒の順に並んでいる部分を求めたい場合は、white & (black << 1) & 0xeeee とすればよい。 0xeeee は盤面の右端と左端がつながることを防ぐマスクビットである。 空・白・黒 と並んでいる場合の反転パターンを得るには、p を空白位置を表す値とするとき、 (p>>1) & white & (black<<1) & 0xeeee とするとよい。 同様に、空・白・白・黒 の最初の白のパターンは (p>>1) & white & (white<<1) & (black<<2) & 0xeeee、 2番目の白の部分は (p>>2) & (white>>1) & white & (black<<1) & 0xeeee となる。 これらの論理和を取ったものが、反転パターンとなる まず計算式が分かりません。条件分岐、if else、 forがないのに不等号が計算式の中にあるので何をどういう順番で計算しているのかが分かりません。 0xは2進数のビットの、0の連続の省略形で、eeeeは2進数のビットを16進数表記にあらわしたものという事でしょうか? 例えば 0x0000ffff なら1111 1111 1111 1111 でしょうか? ()は普通に考えてカッコ内を先に計算するという意味でよいでしょうか? &は2進数のビット同士を論理積演算する、という意味でよいでしょうか?2進数論理積演算の教科書は持っています。
回答: >まず計算式が分かりません。条件分岐、if else、 forがないのに不等号が計算式の中にある >>と<<ですね。 2進数はわかりますか?シフト演算と言って>>なら右に1個、<<なら左に1個ずらすのです。 >0xは2進数のビットの、0の連続の省略形で、eeeeは2進数のビットを16進数表記にあらわしたものという事でしょうか? そうです。 >()は普通に考えてカッコ内を先に計算するという意味でよいでしょうか? そうです。 >&は2進数のビット同士を論理積演算する、という意味でよいでしょうか? そうです。 もう1つ、マスク演算と言って a&0xf0 とすればaの上位4ビットが、a&0x0fとすれば下位4ビットが求められます。