MATLAB 位运算与进制转换实战
在 MATLAB 中处理底层数据时,经常需要涉及二进制逻辑运算、进制转换以及定点数表示。下面整理了一些常用函数和注意事项,帮助大家在工程实践中更顺畅地操作。
1. 逻辑与位运算
MATLAB 支持标准的逻辑运算符,可以直接作用于数组元素。
- 逻辑与:
&或and(A, B)。当 A、B 对应元素均为非零时返回 1,否则为 0。 - 逻辑或:
|或or(A, B)。 - 逻辑非:
~或not(A)。 - 逻辑异或:
xor(A, B)。
对于具体的位操作(Bitwise),如 bitand, bitor 等,输入通常要求是数值型或逻辑型,不能直接传入字符串。
% 示例:生成伪随机二进制序列 (PRBS)
bits = randn(1, 8) < 0.5;
% bits = [1 0 0 1 1 0 1 0]
2. 进制转换函数
MATLAB 内置了丰富的进制转换工具,涵盖十进制、二进制、十六进制及浮点数之间的互转。
| 函数 | 说明 |
|---|---|
dec2bin(n) | 十进制转二进制字符串 |
bin2dec(s) | 二进制字符串转十进制整数 |
dec2hex(n) | 十进制转十六进制字符串 |
hex2dec(s) | 十六进制字符串转十进制整数 |
hex2num(s) | 十六进制字符串转浮点数 |
注意:bin2dec 的输入必须是字符串类型。例如:
val = bin2dec('01011100'); % 结果为 92
val2 = bin2dec('1001'); % 结果为 9
位运算中的类型陷阱
经过 dec2bin 得到的结果是字符型(char),不能直接作为 bitand 等函数的输入。需要先转换为数值型。
a = dec2bin(54); % a = '110110' (char 类型)
% 将 char 转为 numeric
c(a == '1') = 1;
c(a == '0') = 0;
aa = '011011';
dd(aa == '0') = 0;
dd(aa == '1') = 1;
t = bitand(c, dd); % 按位与操作
% t = [0 1 0 0 1 0]
% 如需显示结果,可再转回字符
tt(t == 1) = '1';
tt(t == 0) = '0';
% tt = '010010'
3. 定点数与量化器
在信号处理或 FPGA 设计中,常需模拟硬件的定点行为。MATLAB 提供了 quantizer 和 fi (fixed-point) 对象。

