bitshift
将位移动指定位数
说明
假定 intout
= bitshift(A
,k
,assumedtype
)A
的类型为 assumedtype
。
示例
偏移的 8 位整数
反复将无符号的 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
将字节合并为 32 位无符号整数
使用 bitor
和 bitshift
将四个 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
— 输入值
数组
输入值,指定为数组。A
可以是标量或与 k
大小相同的数组。
如果
A
为双精度数组,并且未指定assumedtype
,则 MATLAB 会将A
视为无符号的 64 位整数。如果已指定
assumedtype
,A
中的所有元素必须是assumedtype
类型范围内的整数值。
数据类型: double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
k
— 要移位的位数
整数 | 整数数组
要位移的位数,指定为整数或整数数组。k
可以是标量或与 A
大小相同的数组。
数据类型: double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
assumedtype
— 假定的 A
的数据类型
'uint64'
| 'uint32'
| 'uint16'
| 'uint8'
| 'int64'
| 'int32'
| 'int16'
| 'int8'
假定的 A
的数据类型,指定为 'uint64'
、'uint32'
、'uint16'
、'uint8'
、'int64'
、'int32'
、'int16'
或 'int8'
。
如果
A
是整数类型数组,assumedtype
必须指定相同的整数类型。如果
A
是双精度数组,则assumedtype
可以指定任何有效的整数类型。
数据类型: char
| string
输出参量
intout
— 移位后的值
数组
移位后的值,以数组形式返回。intout
的数据类型与 A
相同。
如果
A
和k
是标量,则intout
也是标量。如果
A
或k
为数组,则intout
的大小与该数组相同。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
HDL 代码生成
使用 HDL Coder™ 为 FPGA 和 ASIC 设计生成 VHDL、Verilog 和 SystemVerilog 代码。
为了高效地生成 HDL 代码,请使用 Fixed-Point Designer™ 函数 bitsll
、bitsrl
或 bitsra
,而不是 bitshift
。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
至少有一个输入(
A
或k
)必须是整数数组。输入
A
不能是有符号整数数组。不支持 64 位整数。
不支持
assumedtype
参量。
有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)