linuxのメモ

Linux kernelの実装を解説していきます (対象ver 4.5)

bit操作 - constant_test_bit()

概要

ビットマップから任意のビットの状態を取得する

詳細

以下の引数を受け取る

  • ビット番号を示す : nr
  • ビットマップを保持する配列 : addr

以下の演算で算出する2つの値の論理積を取ることでaddrのビットマップからnr番目のビットの状態を取得する

  • nrを[BITS_PER_LONG - 1]でマスクし、nrBITS_PER_LONG以上のビットを落とし、算出したビットだけが1の値を生成する
  • [nr >> _BITOPS_LONG_SHIFT]でBITS_PER_LONG以下のビットが全て隠れるようにシフトし、addrの算出した値をインデックスとする要素を取得する