ビット単位の整数演算
これらの関数を使用すると、2 の補数値を表すビット・パターンとして整数を操作できます。この場合、ビット位置 N は 2**N の重みを持ちます。ビットは 0 から上方向に番号が付けられます。これらの演算は、整数の符号ビットが左方向に無限に拡張されているかのように処理します。つまり、最上位ビットを超えたすべての位置で、正の整数は 0 のビットを持ち、負の整数は 1 のビットを持ちます。
| 関数 | 結果 | 説明 |
|---|---|---|
~~ INT1 |
整数 | INT1 のビット単位の補数を生成します。つまり、INT1 で 0 である各ビットが 1 になります。~~ INT = –(INT + 1) は常に真です。 |
INT1 || INT2 |
整数 | この演算の結果は、INT1 と INT2 のビット単位の「包括的論理和」 または です。つまり、INT1 と INT2 のどちらかまたは両方に 1 がある各ビットが 1 になります。 |
INT1 ||/& INT2 |
整数 | この演算の結果は、INT1 と INT2 のビット単位の「排他的論理和」 または です。つまり、INT1 と INT2 のどちらかにだけ (両方ではない) 1 がある各ビットが 1 になります。 |
INT1 && INT2 |
整数 | INT1 と INT2 のビット単位の「論理積」を生成します。つまり、INT1 と INT2 の両方で 1 である各ビットが 1 になります。 |
INT1 &&~~ INT2 |
整数 | この演算の結果は、INT1 と、INT2 のビット単位の補数との、ビット単位の「論理積」です。つまり、INT1 のあるビット位置の値が 1 で、INT2 の同じビット位置の値が 0 の場合に、結果は 1 になります。これは INT1 && (~~INT2) と同じであり、INT2 内で設定された INT1 のビットを消去する場合に役に立ちます。 |
INT << N |
整数 | N の数だけ位置を左にシフトした INT1 のビット・パターンを生成します。N の値が負の場合は、右にシフトします。 |
INT >> N |
整数 | N の数だけ位置を右にシフトした INT1 のビット・パターンを生成します。N の値が負の場合は、左にシフトします。 |
INT1 &&=_0 INT2 |
Boolean | ブール式 INT1 &&
INT2 /== 0 と同じですが、より効率的です。 |
INT1 &&/=_0 INT2 |
Boolean | ブール式 INT1 &&
INT2 == 0 と同じですが、より効率的です。 |
integer_bitcount(INT) |
整数 | INT の 2 の補数表現の、1 または 0 のビットの数をカウントします。INT が負ではない場合、N は 1 のビット数になります。INT が負の場合、N は 0 のビット数になります。符号の拡張のため、負ではない整数には無限大の数の 0 のビットがあります。また、負の整数には無限大の数の 1 のビットがあります。integer_bitcount(INT) = integer_bitcount(-(INT+1)) は常に真です。 |
integer_leastbit(INT) |
整数 | 整数 INT の最下位ビット・セットのビット位置 N を返します。N は、最も大きな 2 のべき乗です。N によって INT が正確に割られます。 |
integer_length(INT) |
整数 | INT の長さのビット数を、2 の補数の整数として返します。つまり、N は、INT <
(1 << N) if INT >= 0 INT >= (–1 << N) if INT <
0 であるような最も小さい整数です。INT が負ではない場合、符号なしの整数として INT を表すには、少なくとも N ビットのフィールドが必要です。または、INT の符号にかかわらず、INT を符号付きの整数として表すには、少なくとも N+1 ビットが必要です。 |
testbit(INT, N) |
Boolean | 整数 INT の N の位置にあるビットを検定し、ビット N の状態をブール値として返します。このブール値は、1 の場合は真 (true)、0 の場合は偽 (false) になります。 |