ビット演算を理解する ~2進数でフラグ管理~

enumのビット演算

毎日コンピュータと向かい合ってるのにビットのことがよくわかっていなかった・・・

2進数でフラグ管理するよ!


1つの変数に複数のフラグを立てることができるよ!というもの

10進数だと算術演算
2進数だと論理演算

ビットシフト


シフト演算子を使ってビット列を左右にずらす
ビット列が左に1つシフトするということは、純粋に数が倍になるということ
ビット列が右に1つシフトするということは、数が半分になるということ

2の倍数でビットフラグを作成


2進数で1桁ずつフラグを立てるために、2の倍数でビットフラグを作成する

BIT_FLAG_1 = 1 << 0;
BIT_FLAG_2 = 1 << 1;
BIT_FLAG_4 = 1 << 2;
BIT_FLAG_8 = 1 << 3;

こう書くことで2進数で1桁ずつフラグを立てることができる

[Flags]
enum宣言時にFlagsAttributeをつけることでビット演算可能に

使い方


フラグを追加する : OR演算子
フラグを削除する : AND演算子と反転演算子の組み合わせ
フラグが立っているかチェックする : AND演算子

論理積 0があれば0、なければ1
論理和 1があれば1、なければ0

今回書いたテスト用コード


結果


参考


https://qiita.com/stc1988/items/e6f76503ddf06fcf20b8
http://yas-hummingbird.blogspot.com/2009/02/c_11.html

Leave a Comment

©2018 haquxx