4.5位操作

Octave提供了许多函数,用于按位操作数值。设置和获取单个位值的基本函数如下bitsetbitget.

 
: B = bitset (A, n)
: B = bitset (A, n, val)

在位置设置或重置位n中的无符号整数的A.

最低有效位为n1.val= 0 重置位和val1. 设置位。如果没有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

详见: bitand, bitor, bitxor, bitget, bitcmp, bitshift, intmax, flintmax.

广告
 
: b = bitget (A, n)

返回位置处的位值n中的无符号整数的A.

最低有效位为n1.

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

详见: bitand, bitor, bitxor, bitset, bitcmp, bitshift, intmax, flintmax.

广告

Octave的所有位运算的参数都可以是标量或数组,除了bitcmp谁的k参数必须上升。在多个参数是数组的情况下,所有参数都必须具有相同的形状,并且按位运算符分别应用于参数的每个元素。如果至少有一个参数是标量,一个是数组,则标量参数是重复的。因此

bitget (100, 8:-1:1)

与相同

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

需要注意的是,传递给Octave的位操作函数的所有值都被视为整数。因此,即使的示例bitset以上通过浮点值10,它被视为位[1, 0, 1, 0]而不是的本机浮点格式表示的比特10.

从于可以用数字表示的最大值对于位操作很重要,特别是在形成掩码时,Octave提供了两个实用函数:flintmax对于浮点整数,以及intmax对于整数对象(uint8, int64

Octave还包括基本的按位运算符“and”、“or”和“exclusive or”。

 
: z = bitand (x, y)

返回非负整数的按位AND。

x, y必须在[0,intmax]范围内

详见: bitor, bitxor, bitset, bitget, bitcmp, bitshift, intmax, flintmax.

广告
 
: z = bitor (x, y)

返回非负整数的按位“或xy.

详见: bitor, bitxor, bitset, bitget, bitcmp, bitshift, intmax, flintmax.

广告
 
: z = bitxor (x, y)

返回非负整数的按位XORxy.

详见: bitand, bitor, bitset, bitget, bitcmp, bitshift, intmax, flintmax.

广告

按位“not”运算符是一元运算符,用于对值的每个位执行逻辑负性。为了使其有意义,必须定义对其求反值的掩码。Octave的“按位”not“运算符是bitcmp.

 
: C = bitcmp (A, k)

返回k-中整数的位补码A.

如果k被省略k = log2 (flintmax) + 1是假定的。

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

详见: bitand, bitor, bitxor, bitset, bitget, bitcmp, bitshift, flintmax.

广告

Octave还包括按位左移和右移值的能力。

 
: B = bitshift (A, k)
: B = bitshift (A, k, n)

返回ak的位偏移n-中的数字无符号整数A.

一个正的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

详见: bitand, bitor, bitxor, bitset, bitget, bitcmp, intmax, flintmax.

广告

从值的任一端移出的位将丢失。Octaveaso还使用算术移位,其中值的符号位在右移期间为kept。例如

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

请注意bitshift (int8 (-1), -1)-1从于的位表示-1在中int8数据类型为[1, 1, 1, 1, 1, 1, 1, 1].


版权所有 © 2024-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2