bit field

の存在を忘れてたけど最近ふと思い出した。普段はそこまでメモリをケチる必要性が無かったので普通にフラグはbool、数値はintとかやってた。最近はICPCでフラグが幾つか欲しいけど変数増やしたくねーしメモリ使用量も抑えたいってことでbit演算で色々やってた。でも、俺は読めるけど慣れてないと確かに読むのは厳しいかもしれない。どうしようと悩んだあげくbit fieldを思い出した感じ。

bit fieldなら同等の目的を読みやすく達成できるし、処理効率もフラグとかに使用する程度ならbit演算と変わらんだろうし、良いのではないかと思う。ぱっと思いつくbit fieldの良い点 for ICPC

  • 各bit(s)に名前が付くので読みやすい
  • 何bit目ということを覚えておかなくて良い
  • ==, !=よりも優先順位の低い演算子を使わなくて良いので()が減る

という感じ。処理系依存っていう点は無視してbit演算に劣る点は

  • 各bitの同時操作ができない
  • そのせいで複数のフラグの同時判定には && が必要
  • 名前が無い利点を生かせない(状況に応じて意味を変える等)

とかかな。劣る点の最後のヤツは配列の循環利用みたいな事ができないという意味。どうしてもbit演算使いたくない系の人は最後の手段として使ってみるのも良いんじゃないかと思う。そもそもbit演算すら使う状況があんま無いという説が有力だけど。