Main Content

bitshift

将位移动指定位数

说明

示例

intout = bitshift(A,k) 返回向左偏移 k 位的 A,这等效于乘以 2kk 的负值与向右移位或除以 2|k| 并向负无穷舍入到最接近的整数相对应。将截断任何溢出位。

  • 如果 A 是有符号的整数数组,则 bitshift 返回算数偏移结果,并在 k 为负时保留有符号的位,k 为正时不保留有符号的位。

  • 如果 k 为正,MATLAB® 将位左移,并在右侧插入 k 0 位。

  • 如果 k 为负,并且 A 为非负,MATLAB 将位右移,并在左侧插入 |k| 0 位。

  • 如果 k 为负,并且 A 为负,MATLAB 将位右移,并在左侧插入 |k| 1 位。

示例

intout = bitshift(A,k,assumedtype) 假定 A 的类型为 assumedtype

示例

全部折叠

反复将无符号的 8 位值的位左移,直到所有非零位溢出为止。

a = intmax('uint8');
s1 = 'Initial uint8 value %5d is %08s in binary\n';
s2 = 'Shifted uint8 value %5d is %08s in binary\n';
fprintf(s1,a,dec2bin(a))
Initial uint8 value   255 is 11111111 in binary
 for i = 1:8
    a = bitshift(a,1);
    fprintf(s2,a,dec2bin(a))
 end
Shifted uint8 value   254 is 11111110 in binary
Shifted uint8 value   252 is 11111100 in binary
Shifted uint8 value   248 is 11111000 in binary
Shifted uint8 value   240 is 11110000 in binary
Shifted uint8 value   224 is 11100000 in binary
Shifted uint8 value   192 is 11000000 in binary
Shifted uint8 value   128 is 10000000 in binary
Shifted uint8 value     0 is 00000000 in binary

使用不同的假定整数类型为数字求偏移量。

uintout = bitshift(6,5:7,'uint8')
uintout = 1×3

   192   128     0

intout = bitshift(6,5:7,'int8')
intout = 1×3

   -64  -128     0

使用 bitorbitshift 将四个 8 位字节打包为它们组成的 32 位整数。

创建四个字节的数据。用十六进制字面值指定数据,使用 -u32 后缀指定数据应存储为 uint32。每个字节包含 8 位数据。

byte4 = 0x87u32; 
byte3 = 0x65u32; 
byte2 = 0x43u32; 
byte1 = 0x21u32;

首先将第一个字节作为 32 位无符号整数的前 8 位相加。

packedNum = byte1;

接下来,将其他三个字节打包到 packedNum 中,使用 bitshift 将字节移至正确的位置,使用 bitor 将位复制过来。

packedNum = bitor(packedNum,bitshift(byte2,8));
packedNum = bitor(packedNum,bitshift(byte3,8*2));
packedNum = bitor(packedNum,bitshift(byte4,8*3));

查看打包的 32 位整数。

format hex
packedNum
packedNum = uint32
   87654321

输入参数

全部折叠

输入值,指定为数组。A 可以是标量或与 k 大小相同的数组。

  • 如果 A 为双精度数组,并且未指定 assumedtype,则 MATLAB 会将 A 视为无符号的 64 位整数。

  • 如果已指定 assumedtypeA 中的所有元素必须是 assumedtype 类型范围内的整数值。

数据类型: double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

要位移的位数,指定为整数或整数数组。k 可以是标量或与 A 大小相同的数组。

数据类型: double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

假定的 A 的数据类型,指定为 'uint64''uint32''uint16''uint8''int64''int32''int16''int8'

  • 如果 A 是整数类型数组,assumedtype 必须指定相同的整数类型。

  • 如果 A 是双精度数组,则 assumedtype 可以指定任何有效的整数类型。

数据类型: char | string

输出参数

全部折叠

移位后的值,以数组形式返回。intout 的数据类型与 A 相同。

  • 如果 Ak 是标量,则 intout 也是标量。

  • 如果 Ak 为数组,则 intout 的大小与该数组相同。

扩展功能

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

版本历史记录

在 R2006a 之前推出

另请参阅

| | | | | |