質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1533閲覧

[コンピュータ将棋] 成り駒を表すビット演算

ozil10

総合スコア36

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2015/12/12 22:43

http://homepage1.nifty.com/Ike/ComShogi/01.html

上記のページを参考にコンピュータ将棋を作成中です。

このページでは成り駒を表すために(1ビットで) PROMOTED = 1 << 3、自分自身の駒を表すために(1ビットで)SELF = 1 << 4、敵の駒を表すために(1ビットで)ENEMY = 1 << 5を使っていますがそれぞれどういう意味かがわかりません。。

以下、一部ソースコードです。

enum { // 何もないところ EMPTY=0, EMP=0, // 3文字も準備しておくとソースが見やすいので(笑) // 成り駒につける目印(1ビット) PROMOTED=1<<3, // 駒をあらわす数値 FU=1, KY=2, KE=3, GI=4, KI=5, KA=6, HI=7, OU=8, TO=FU+PROMOTED, NY=KY+PROMOTED, NK=KE+PROMOTED, NG=GI+PROMOTED, UM=KA+PROMOTED, RY=HI+PROMOTED, // 自分自身の駒につける目印(1ビット) SELF=1<<4, // 敵の駒につける目印(1ビット) ENEMY=1<<5, // 敵も味方も進めないところ(盤の外)の目印 WALL=SELF+ENEMY, // 実際の駒 SFU=SELF+FU, //味方の歩 STO=SELF+TO, //味方のと金 SKY=SELF+KY, //味方の香車 SNY=SELF+NY, //味方の成り香 SKE=SELF+KE, //味方の桂馬 SNK=SELF+NK, //味方の成り桂 SGI=SELF+GI, //味方の銀 SNG=SELF+NG, //味方の成り銀 SKI=SELF+KI, //味方の金 SKA=SELF+KA, //味方の角 SUM=SELF+UM, //味方の馬 SHI=SELF+HI, //味方の飛車 SRY=SELF+RY, //味方の龍 SOU=SELF+OU, //味方の玉 EFU=ENEMY+FU, //敵の歩 ETO=ENEMY+TO, //敵のと金 EKY=ENEMY+KY, //敵の香車 ENY=ENEMY+NY, //敵の成り香 EKE=ENEMY+KE, //敵の桂馬 ENK=ENEMY+NK, //敵の成り桂 EGI=ENEMY+GI, //敵の銀 ENG=ENEMY+NG, //敵の成り銀 EKI=ENEMY+KI, //敵の金 EKA=ENEMY+KA, //敵の角 EUM=ENEMY+UM, //敵の馬 EHI=ENEMY+HI, //敵の飛車 ERY=ENEMY+RY, //敵の龍 EOU=ENEMY+OU, //敵の玉 };

1 << 3 で何をしているかご教示いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

<<は左シフト演算です。同様に>>は右シフトになります。
1 << 3は、1(2進数:00000001)を左に3ビットシフトするという意味になり、結果8(2進数:00001000)になります。
「シフト演算子」とか「ビット演算」などで検索すると詳しく解説しているサイトが見つかります。

何かの状態を示すときに、状態別に一つ一つ変数を割り当てないで一つの変数の中でビットを割り当てて、そのビットが0か1かで状態を判定するというやりかたは、よくある手法です。おそらく、プログラムのどこかでif文の条件式などで(変数 & SELF)(変数 & ENEMY)などという式が使われていると思います。

投稿2015/12/12 23:20

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問