4D v14.3ビットワイズ演算子 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v14.3
ビットワイズ演算子
|
処理 | 演算子 | シンタックス | 戻り値 | |
Bitwise AND | & | Long & Long | Long | |
Bitwise OR (inclusive) | | | Long | Long | Long | |
Bitwise XOR (exclusive) | ^| | Long ^| Long | Long | |
Left Bit Shift | << | Long << Long | Long | (see note 1) |
Right Bit Shift | >> | Long >> Long | Long | (see note 1) |
Bit Set | ?+ | Long ?+ Long | Long | (see note 2) |
Bit Clear | ?- | Long ?- Long | Long | (see note 2) |
Bit Test | ?? | Long ?? Long | Bool | (see note 2) |
Notes
(1) Left Bit ShiftおよびRight Bit Shift演算では、2番目のオペランドは、結果値において1番目のオペランドのビットがシフトされるビット数を示します。したがって、この2番目のオペランドは、0~32の間でなければなりません。0ビットシフトするとその値がそのまま返されます。また、31ビットより多くシフトするとすべてのビットがなくなるので、0x00000000が返されます。それ以外の値を2番目のオペランドとして渡した場合、結果は意味のない値になります。処理 | 説明 |
Bitwise AND | それぞれの結果ビットは2つのオペランドのビットの論理ANDです。 |
下記は、論理ANDの真偽表です: | |
1 & 1 --> 1 | |
0 & 1 --> 0 | |
1 & 0 --> 0 | |
0 & 0 --> 0 | |
すなわち、両オペランドのビットが1の場合、結果ビットが1になり、その他の場合は結果ビットが0になります。 | |
Bitwise OR (inclusive) | それぞれの結果ビットは2つのオペランドのビットの論理ORです。 |
下記は、論理ORの真偽表です: | |
1 | 1 --> 1 | |
0 | 1 --> 1 | |
1 | 0 --> 1 | |
0 | 0 --> 0 | |
すなわち、いずれかのオペランドのビットが1の場合、 | |
結果ビットが1になり、その他の場合は結果ビットが0になります。 | |
Bitwise XOR (exclusive) | それぞれの結果ビットは2つのオペランドのビットの排他的論理ORです。 |
下記は、排他的論理ORの真偽表です: | |
1 ^| 1 --> 0 | |
0 ^| 1 --> 1 | |
1 ^| 0 --> 1 | |
0 ^| 0 --> 0 | |
すなわち、オペランドのビットのいずれか一方だけが1の場合、 | |
結果ビットが1になり、その他の場合は結果ビットが0になります。 | |
Left Bit Shift | 最初のオペランド値が結果値に設定され、次に結果ビットが2番目のオペランドで示されたビット数だけ左にシフトします。左側のビットがなくなり、右側の新しいビットは0に設定されます。 |
Note: 正の数だけを考えると、Nビット左にシフトすることは、2^Nを掛けることと同じです。 | |
Right Bit Shift | 最初のオペランド値が結果値に設定され、次に結果ビットが2番目のオペランドで示されたビット数だけ右にシフトします。右側のビットがなくなり、左側の新しいビットは0に設定されます。 |
Note: 正の数だけを考えると、Nビット左にシフトすることは、2^Nで割ることと同じです。 | |
Bit Set | 最初のオペランド値が結果値に設定され、次に結果ビットのうち2番目のオペランドで示されたビットが1に設定されます。他のビットはそのままです。 |
Bit Clear | 最初のオペランド値が結果値に設定され、次に結果ビットのうち2番目のオペランドで示されたビットが0に設定されます。他のビットはそのままです。 |
Bit Test | 最初のオペランドのうち、2番目のビットで示されたビットが1の場合、Trueが返されます。最初のオペランドのうち、2番目のビットで示されたビットが0の場合、Falseが返されます。 |
(1) 次の表にそれぞれのビット演算子の例を示します:
処理 | 例題 | 結果 |
Bitwise AND | 0x0000FFFF & 0xFF00FF00 | 0x0000FF00 |
Bitwise OR (inclusive) | 0x0000FFFF | 0xFF00FF00 | 0xFF00FFFF |
Bitwise XOR (exclusive) | 0x0000FFFF ^| 0xFF00FF00 | 0xFF0000FF |
Left Bit Shift | 0x0000FFFF << 8 | 0x00FFFF00 |
Right Bit Shift | 0x0000FFFF >> 8 | 0x000000FF |
Bit Set | 0x00000000 ?+ 16 | 0x00010000 |
Bit Clear | 0x00010000 ?- 16 | 0x00000000 |
Bit Test | 0x00010000 ?? 16 | True |
(2) 4Dは多くの定義済み定数を提供しています。これらの定数の中には、そのリテラルが"bit"または"mask"で終わるものがあります。例えばテーマで提供される定数の場合を以下に示します:
定数 | 型 | 値 |
Changed resource bit | 倍長整数 | 1 |
Changed resource mask | 倍長整数 | 2 |
Locked resource bit | 倍長整数 | 4 |
Locked resource mask | 倍長整数 | 16 |
Preloaded resource bit | 倍長整数 | 2 |
Preloaded resource mask | 倍長整数 | 4 |
Protected resource bit | 倍長整数 | 3 |
Protected resource mask | 倍長整数 | 8 |
Purgeable resource bit | 倍長整数 | 5 |
Purgeable resource mask | 倍長整数 | 32 |
System heap resource bit | 倍長整数 | 6 |
System heap resource mask | 倍長整数 | 64 |
これらの定数により、Get resource propertiesが返した値をテストしたり、SET RESOURCE PROPERTIESに渡す値を作成したりすることができます。リテラルが"bit"で終わる定数は、テスト、消去またはセットするビットの位置を指定します。リテラルが"mask"で終わる定数は、テスト、消去またはセットするビットが1の場合のみ、倍長整数値を指定します。
例えば、(変数$vlResAttrにプロパティを取得した) リソースがパージ可能かどうかをテストするには、以下のように記述します:
If($vlResAttr ?? Purgeable resource bit) ` リソースはパージ可能か?
または:
If(($vlResAttr & Purgeable resource mask)#0) ` リソースはパージ可能か?
逆に、これらの定数を使用して同じビットを設定することもできます。以下のように記述します:
$vlResAttr:=$vlResAttr ?+Purgeable resource bit
または:
$vlResAttr:=$vlResAttr |Purgeable resource bit
(3) この例では、2つの整数値を倍長整数値に格納します。以下のように記述します:
$vlLong:=($viIntA<<16)|$viIntB ` 2つの整数を倍長整数に格納
$vlIntA:=$vlLong>>16 ` ハイワードに格納されている整数を取り出します
$viIntB:=$vlLong & 0xFFFF ` ローワードに格納されている整数を取り出します
Tip: 倍長整数または整数の値を数値とビットワイズ演算子を組み合わせた式で処理する場合は注意が必要です。ハイビット(倍長整数の場合はビット31、整数の場合はビット15)は符号を設定します。その値が消去された場合には正の数で、値が設定された場合には負の数です。数値演算子はこのビットを使用して、値の符号を検出します。 ビットワイズ演算子はこのビットの意味を無視します。
プロダクト: 4D
テーマ: 演算子
ピクチャ演算子
数値演算子
文字列演算子
日付演算子
時間演算子
比較演算子
演算子
論理演算子
ランゲージリファレンス ( 4D v12.4)
ランゲージリファレンス ( 4D v11 SQL Release 6)
ランゲージリファレンス ( 4D v14 R3)
ランゲージリファレンス ( 4D v14 R2)
ランゲージリファレンス ( 4D v13.5)
ランゲージリファレンス ( 4D v14.3)
ランゲージリファレンス ( 4D v14 R4)