読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

逆引きビット演算リファレンス

Ruby

常識レベルのネタですが、たまに使うと忘れてたりするので。よく使う?ビット演算を、次に示すファイルの操作権限設定を例としてまとめてみます。

  • ファイルに対する操作権限を3ビットの数値で記録する。
  • 読み込み権.. 1ビット目, 書き込み権..2ビット目 とする。

各権限を示す定数は次の通り。

# 読み込み権
READ  = 1 << 0 # 001
# 書き込み権
WRITE = 1 << 1 # 010

# すべての権限
ALL = READ | WRITE # 011
# 権限なし
NONE = 0           # 000

特定のビットをonにしたい

「or」を使う。以下は書き込み権を付与する例。

# 書き込み権を付与
puts NONE | WRITE # 010

特定のビットをoffにしたい

「反転してand」する。読み込み権を剥奪。

# 読み込み権を剥奪
puts ALL & ~READ # 010

「3ビット目は、ユーザーに見せない隠しパラメータなので必ずoffにした状態で記録。参照時もoffにして返す」時とかにも使う。

特定のビットのon/offを判定したい。

「and」を使う。読み込み権があるかどうかをチェックする。

# 読み込み権があるか評価
puts ALL  & READ != 0 # true
puts NONE & READ != 0 # false

おまけ:今日の文系プログラマ

昔(遙か昔だからね!)「|」とか「&」を使うの知らなくて、「+,-」でやってたなー(遠い目)

# 権限
privilege = 0
privilege += READ # 読み込み権を付与
privilege -= READ # 読み込み権を剥奪

一応動くんだけどね・・・。これon/off判定はどうやってたんだろ、思い出せん。