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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

1813閲覧

ビット演算によるフラグ管理

lleldigm

総合スコア59

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2020/06/09 02:54

いつもお世話になっています。

ビット演算で複数フラグ管理するコードを書いているのですが、行き詰っているのでご教授お願いします。

やりたいこと

フラグをまとめた変数からフラグごとのチェックボックスに反映させたい。

状態異常名 状態異常物理名 二進数 十進数 1 通常 NORMAL 000000 0 2 死亡 DEATH 000001 1 3 毒 POISON 000010 2 4 睡眠 SLEEP 000100 4 5 石化 PETRIFIED 001000 8 6 混乱 CONFUSION 010000 16

C#

1int status = 18 //毒(2)と混乱(16)状態 2 3checkBox_DEATH.Checked = false; 4checkBox_POISON.Checked = false; 5checkBox_DEATH.Checked = false; 6checkBox_SLEEP.Checked = false; 7checkBox_PETRIFIED.Checked = false; 8checkBox_CONFUSION.Checked = false; 9 10//ここにstatus変数から毒と混乱のフラグを立てるコードを書きたい。

参考にしたサイト

https://blog.t5o.me/post/20151111/php-bitmask-flags-control.html

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

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

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

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

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

guest

回答2

0

ベストアンサー

enum をフラグとして扱う方法が読みやすくて良いと思います。

C#

1[Flags] 2public enum Status 3{ 4 Normal = 0x00, 5 Death = 0x01, 6 Poison = 0x02, 7 Sleep = 0x04, 8 Petrified = 0x08, 9 Confusion = 0x10 10}

C#

1var status = Status.Poison | Status.Confusion; 2checkBox_NORMAL.Checked = status == Status.Normal; 3checkBox_POISON.Checked = status.HasFlag(Status.Poison); 4checkBox_DEATH.Checked = status.HasFlag(Status.Death); 5checkBox_SLEEP.Checked = status.HasFlag(Status.Sleep); 6checkBox_PETRIFIED.Checked = status.HasFlag(Status.Petrified); 7checkBox_CONFUSION.Checked = status.HasFlag(Status.Confusion);

投稿2020/06/09 03:29

編集2020/06/09 03:32
BluOxy

総合スコア2663

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

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

lleldigm

2020/06/09 03:40

[flags]←これ(名前がわからない)をつければ、husflagメソッドが使えるようになるのでしょうか
BluOxy

2020/06/09 03:43

フラグズ、もしくはフラッグズです。husflagではなく、HasFlag(ハズフラグ)です。 HasFlagメソッドが使えるかどうかは、お使いになられているでしょう Visual Studio に入力支援機能(インテリジェンス)があるので、そこに候補があるかどうか確認してください。
BluOxy

2020/06/09 03:44

あとは、せっかくHasFlagメソッドの公式ページを紹介しているのですから、サンプルコードや説明をよく読んでみてください。
BluOxy

2020/06/09 03:48

そちらの説明が必要でしたね。ご指摘ありがとうございます。 enumの上に書いている[Flags]は 属性 と呼ばれるものです。詳しい使い方はhihijijiさんの貼ったページを参考にしてください。
lleldigm

2020/06/09 12:13

属性!ありがとうございます! 知らない書き方でした
guest

0

C#

1bool getflag(int bit) 2{ 3 return (status & (1 << bit))!= 0; 4}

ってことかな?

投稿2020/06/09 02:56

y_waiwai

総合スコア88042

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

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

lleldigm

2020/06/09 03:11

この場合引数のbitのところには何が入るのでしょうか
lleldigm

2020/06/09 03:14

毒の場合1、石化の場合4といった認識で大丈夫ですか?
y_waiwai

2020/06/09 03:55

0から31まで、効果の番号を入れます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問