4.5 Bit Manipulations

Last-modified: 2025-03-20 (木) 20:28:49

4.5 ビット操作

Octave は、数値をビット単位で操作するための関数をいくつか提供します。個々のビットの値を設定および取得するための基本関数は、bitsetおよびですbitget。

: B = bitset (A, n)

: B = bitset (A, n, val)

A内の符号なし整数の位置nにあるビットを設定またはリセットします。

最下位ビットはn = 1 です。val = 0 は ビットをリセットし、 val = 1 は ビットを設定します。val が指定されていない場合は、デフォルトで 1 (ビット設定) になります。すべての入力は同じサイズまたはスカラーである必要があります。

例1: 複数のビットを設定する

x = bitset (1, 3:5)
 ⇒ x =
  5    9   17
dec2bin (x)
 ⇒
    00101
    01001
    10001

例2: ビットのリセットと設定

x = bitset ([15 14], 1, [0 1])
 ⇒ x =
  14    15

See also: bitand, bitor, bitxor, bitget, bitcmp, bitshift, intmax, flintmax.

: b = bitget (A, n)

最下位ビットはn = 1 です。

The least significant bit is n = 1.

bitget (100, 8:-1:1)
⇒ 0  1  1  0  0  1  0  0

See also: bitand, bitor, bitxor, bitset, bitcmp, bitshift, intmax, flintmax.

Octave のビット演算の引数は、kbitcmp引数がスカラーでなければならない を除いて、スカラーまたは配列にすることができます。複数の引数が配列である場合、すべての引数は同じ形状でなければならず、ビット演算子は引数の各要素に個別に適用されます。少なくとも 1 つの引数がスカラーで、もう 1 つが配列である場合、スカラー引数は重複します。したがって、

bitget (100, 8:-1:1)

同じです

bitget (100 * ones (1, 8), 8:-1:1)

Octave のビット操作関数に渡されるすべての値は整数として扱われることに注意してください。したがって、bitset上記の の例では浮動小数点値 が渡されます が10、[1, 0, 1, 0]のネイティブ浮動小数点形式表現の ビットではなく ビットとして扱われます10。

数値で表すことができる最大値は、特にマスクを形成するときにビット操作にとって重要であるため、Octave はflintmax浮動小数点整数用と intmax整数オブジェクト ( 、 など) 用のuint82int64つのユーティリティ関数を提供します。

Octave には、基本的なビット単位の「and」、「or」、「exclusive or」演算子も含まれています。

: z = bitand (x, y)

Rでない整数のビット単位の AND を返します。

x、y は[0,intmax] の範囲内でなければなりません

See also: bitor, bitxor, bitset, bitget, bitcmp, bitshift, intmax, flintmax.

: z = bitor (x, y)

非負整数xとyのビット単位の OR を返します。

See also: bitor, bitxor, bitset, bitget, bitcmp, bitshift, intmax, flintmax.

: z = bitxor (x, y)

非負整数xとyのビット単位の XOR を返します。

See also: bitand, bitor, bitset, bitget, bitcmp, bitshift, intmax, flintmax.

ビット単位の「not」演算子は、値の各ビットの論理否定を実行する単項演算子です。これが意味を成すためには、値が否定されるマスクを定義する必要があります。Octave のビット単位の「not」演算子は ですbitcmp。

: C = bitcmp (A, k)

A内の整数のkビットの補数を返します。

kが省略されている場合はk = log2 (flintmax) + 1とみなされます。

bitcmp (7,4)
 ⇒ 8
dec2bin (11)
 ⇒ 1011
dec2bin (bitcmp (11, 6))
 ⇒ 110100

See also: bitand, bitor, bitxor, bitset, bitget, bitcmp, bitshift, flintmax.

Octave には、値をビット単位で左シフトおよび右シフトする機能も含まれています。

: B = bitshift (A, k)

: B = bitshift (A, k, n)

Aのn桁の符号なし整数のkビットシフトを返します。

正のkは左シフト、負の k は右シフトになります。

nが省略された場合、デフォルトで 64 になります。n は[1,64] の範囲内である必要があります。

bitshift (eye (3), 1)
⇒
2 0 0
0 2 0
0 0 2
bitshift (10, [-2, -1, 0, 1, 2])
⇒ 2   5  10  20  40

See also: bitand, bitor, bitxor, bitset, bitget, bitcmp, intmax, flintmax.

値の両端からシフトされたビットは失われます。Octave は算術シフトも使用します。算術シフトでは、値の符号ビットは右シフト中に保持されます。例:

bitshift (-10, -1)
⇒ -5
bitshift (int8 (-1), -1)
⇒ -1

データ型ののビット表現は であるため、bitshift (int8 (-1), -1)であることに注意してください。 -1-1int8[1, 1, 1, 1, 1, 1, 1, 1]