Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$BITFIND

ビット文字列内の指定されたビット値の位置を返します。

Synopsis

$BITFIND(bitstring,bitvalue,position,direction)

パラメータ

bitstring ビット文字列として評価される式。任意のタイプの変数、$FACTOR、ユーザ定義関数、または oref.prop..propi%prop プロパティ参照を指定できます。
bitvalue ビット文字列内を検索する値 (0 または 1)。
position オプション — 検索が開始されるビット位置。正の整数で指定されます。ビット位置は、ビット文字列の先頭を起点に、1 からカウントされます。検索はこの位置から開始します。position の値が 0 の場合は、位置 1 が指定されたものとみなされます。
direction オプション — 方向フラグ。使用可能な値は 1 と -1 です。1 は ビット文字列 (または position) から順方向 (左から右) に検索します (これが既定です)。-1 はビット文字列の最後 (または position) から逆方向に検索します。

概要

$BITFIND(bitstring,bitvalue) は、bitstring 内の指定された bitvalue (0 または 1) が最初に現れる位置を返します。ビット位置は 1 からカウントされます。

$BITFIND(bitstring,bitvalue,position) は、bitstring 内の指定された bitvalue (0 または 1) が、position 以降で最初に現れる位置を返します。

希望のビット値が見つからない場合、または position がビット文字列内のビット数よりも大きい場合は、0 の値を返します。指定された bitstring が未定義の変数である場合、返り値は 0 です。指定された bitstring が有効なビット文字列ではない場合、<INVALID BIT STRING> エラーが発行されます。

"ビット文字列関数の概要" も参照してください。

bitstring = [0,0,1,1,0] の場合、$BITFIND(bitstring,1) の結果は 3 になります。

  // Set a to [0,0,1,1,0]
  SET $BIT(a,1) = 0
  SET $BIT(a,2) = 0
  SET $BIT(a,3) = 1
  SET $BIT(a,4) = 1
  SET $BIT(a,5) = 0
  // Find first 1 bit within a
  WRITE !,$BITFIND(a,1)

bitstring = [0,0,1,1,0] の場合、position 3 から検索を開始するとき、値 1 の最初の 1 ビットはビット 3 で (検索は position ビットを含むので)、値 0 の最初のビットはビット位置 5 になります。

  // Set a to [0,0,1,1,0]
  SET $BIT(a,1) = 0
  SET $BIT(a,2) = 0
  SET $BIT(a,3) = 1
  SET $BIT(a,4) = 1
  SET $BIT(a,5) = 0
  // Find first 1 bit from position 3
  WRITE !,"found a 1 at bit position:",$BITFIND(a,1,3)
  // Find first 0 bit from position 3
  WRITE !,"found a 0 at bit position:",$BITFIND(a,0,3)

bitstring = [0,0,1,1,0] の場合、position 99 から後方に検索を開始するとき、値 1 の最初の 1 ビットはビット位置 4 で、値 0 の最初のビットはビット位置 5 になります。

  // Set a to [0,0,1,1,0]
  SET $BIT(a,1) = 0
  SET $BIT(a,2) = 0
  SET $BIT(a,3) = 1
  SET $BIT(a,4) = 1
  SET $BIT(a,5) = 0
  WRITE !,"found a 1 at bit position:",$BITFIND(a,1,99,-1)
  WRITE !,"found a 0 at bit position:",$BITFIND(a,0,99,-1)

次の例は、すべての 1 ビット位置のリストおよびすべての 0 ビット位置のリストを返します。

  // Set a to [0,0,1,1,0]
  SET $BIT(a,1) = 0
  SET $BIT(a,2) = 0
  SET $BIT(a,3) = 1
  SET $BIT(a,4) = 1
  SET $BIT(a,5) = 0
  SET pos=0
  WRITE !,"Bit positions with value 1: "
  FOR  { SET pos=$BITFIND(a,1,pos+1) QUIT:'pos  WRITE pos,", " }
  WRITE !,"Bit positions with value 0: "
  FOR  { SET pos=$BITFIND(a,0,pos+1) QUIT:'pos  WRITE pos,", " }

次の例は、$FACTOR によって生成されたランダムな 16 ビットのビット文字列に含まれ、値が 1 である最初のビットの位置を返します。

   SET x=$RANDOM(65536)
   FOR i=1:1:16 {WRITE $BIT($FACTOR(x),i) }
   WRITE !,"The first 1 bit is at position ",$BITFIND($FACTOR(x),1)

関連項目

FeedbackOpens in a new tab