$BITFIND
Synopsis
$BITFIND(bitstring,bitvalue,position,direction)
パラメータ
bitstring | ビット文字列として評価される式。任意のタイプの変数、$FACTOR、ユーザ定義関数、または oref.prop、..prop、i%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)