ナビゲーション:前へ 上へ 次へ
11.4 ビット操作のための新たな組込関数 [大凡 5.3]
-
要素別組込関数 BGE, BGT, BLE, BLT
はビット毎の(つまり符号無しの)比較を行います。
またこれらの関数は2つの整数型(異なる種別であっても良い)の引数I、
Jを持ち、基本論理型を返します。
例えばBGE(INT(Z'FF',INT8),128)は真となり、 INT(Z'FF',INT8)>=128は偽となります。
-
[5.3.1]
要素別処理組込関数 DSHIFTL と DSHIFTR は倍幅移動を行います。
これらの関数は3つの引数 I, J, SHIFT を持ち、
I もしくは J に非10進定数表現が許されている事を除き、それぞれInteger型である必要があります。
非10進定数表現は非10進定数表現を指定しなかった方(I もしくは J)の型と種別に変換されます。
I と J は両方共がInteger型である場合、同じ種別でなければなりません。
結果は I と J と同じ種別のInteger型となります。
I と J は連結されて一つの倍幅の値が形成され、
そしてその値が右方向にSHIFT位置分移動するような振る舞いとなります。
DSHIFTLの結果は上位半分の結合移動となり、DSHIFTRの結果は下位半分の結合移動となります。
例えば DSHIFTL(INT(B'11000101',1),B'11001001',2) はINT(B'00010111',1) (10進数の23)となり、 DSHIFTR(INT(B'11000101',1),B'11001001',2) はINT(B'01110010',1) (10進数の114)となります。
- 配列集計組込関数IALL,IANY,IPARITYはビットワイズの演算で配列を集計します。 これらはSUM及びPRODUCTと似た動作をし、 SUM及びPRODUCTがそれぞれ+もしくは*演算により集計を行うのに対して IALL,IANY,IPARITYはそれぞれIAND,IOR,IEORにより集計を行います。 つまりそれぞれの要素がビットワイズの論理積、論理和、排他的論理和により集計されます。 IANYとIPARITYで集計対象要素が一つもない場合の結果はゼロとなります。 またIALLではNOT(zero)となります。
- 要素別組込関数LEADZとTRAILZは整数型(どの種別でも良い)の引数Iの左側の0のビット数、及び右側の0のビット数を返します。 結果は基本整数型です。
- 要素別組込関数MASKLとMASKRは左寄せもしくは右寄せされたビットマスクを生成します。 MASKL(I,KIND)の値は指定された種別の整数で、左側Iビットが1に設定され、残りのビットは0に設定されます。Iは負ではない値で且つ結果のビットサイズ以下でなければなりません。 KINDが省略された場合、結果は基本整数型となります。 MASKRもほぼ同様ですが右側のIビットが1に指定されます。
-
[5.3.1]
要素別処理組込関数
MERGE_BITS(I,J,MASK) は整数値 IとJを合併しますが、
この際に対応するMASKのビットが1の場合にはIのビットを、
そしてゼロの場合にはJのビットを用いてそれを行います。
全ての引数は非10進定数表現もしくはInteger型でなければなりません。
また全てのInteger型の引数は同じ種別でなければなりません。
最低限、I と JのどちらかがInteger型でなければならず、結果はこれと同じ種別と型になります。
MERGE_BITS(I,J,MASK) は IOR(IAND(I,MASK),IAND(J,NOT(MASK))) と同等です。
例えば MERGE_BITS(INT(B'00110011',1),B'11110000',B'10101010') は INT(B'01110010') (10進値は114)と同じです。
- 配列集計組込関数PARITYは論理配列を集計します。 この関数はALL及びANYと同じような振る舞いをしますが.AND.もしくは.OR.演算を行う代わりに.NEQV.演算で集計を行います。 つまり集計要素の.TRUE.の数が奇数であった場合その結果は.TRUE.となります。
- 要素別組込関数 POPCNT(I) は整数引数Iで1に設定されているビット数を返します。 要素別組込関数 POPPAR(I) はIで1に設定されたビットの数が奇数の場合1をそうでない場合は0を返します。 結果は基本整数型です。
