:2026-02-20 21:06 点击:18
在数字信号处理、嵌入式系统开发及数据加密等领域,二进制位的操作是基础且关键的技术,MATLAB作为强大的科学计算软件,提供了丰富的位操作函数,其中bitset与bitget是实现对指定位进行“置位”与“取位”的核心工具,本文将详细介绍这两个函数的语法、功能及应用场景,帮助读者掌握MATLAB中的位操作技巧。
位操作是直接对整数在内存中的二进制位进行修改或提取的操作,将一个8位二进制数的第3位设置为1,或获取其第5位的值,这类操作在底层硬件控制、数据压缩、权限校验等场景中广泛应用,MATLAB通过bitset、bitget、bitshift等一系列函数,为用户提供了便捷的位操作接口,无需深入底层汇编即可高效完成二进制位处理。
bitget函数用于从指定整数中提取某一位的值(0或1),其语法简洁直观,是获取二进制位信息的核心工具。
b = bitget(A, bit)
A:输入数值,可以是标量、向量、矩阵或多维数组,数据类型支持整数(如uint8、int16、uint32等)或逻辑类型; bit:要提取的位的位置,最低位(最右边)为第1位,向左依次递增(如第2位、第3位……); b:返回值,与A同形状的数组,元素为提取的位值(0或1),数据类型为double或logical(取决于bit参数的类型)。bitget的本质是根据bit指定的位置,计算“掩码”(mask)并与输入值进行按位与操作,最终提取该位的值,提取A的第3位时,掩码为二进制..0100(即2^(3-1)=4),A & mask的结果若为0,则该位为0;若为mask,则该位为1。
A = 13; % 二进制:1101(第1位1,第2位0,第3位1,第4位1) b1 = bitget(A, 1); % 提取第1位(最低位),结果:1 b3 = bitget(A, 3); % 提取第3位,结果:1 b5 = bitget(A, 5); % 提取第5位(超出实际位数,结果:0) disp(['第1位: ', num2str(b1), ', 第3位: ', num2str(b3), ', 第5位: ', num2str(b5)]);
输出:
第1位: 1, 第3位: 1, 第5位: 0
A = [1, 5, 9; 13, 7, 2]; % 各元素二进制:1(0001), 5(0101), 9(1001); 13(1101), 7(0111), 2(0010)
b = bitget(A, 4); % 提取所有元素的第4位
disp('第4位的值:');
disp(b);
输出:
第4位的值:
0 0 1
1 0 0
A = uint8(255); % 8位无符号整数,二进制:11111111
b_logical = bitget(A, 1:8, 'logical'); % 以逻辑类型返回所有位
disp('逻辑类型的位值:');
disp(b_logical);
输出:
逻辑类型的位值:
1×8 logical 数组
1 1 1 1 1 1 1 1
bitset函数用于将指定整数中的某一位设置为给定的值(0或1),其语法灵活,支持“置1”和“清0”两种操作,是修改二进制位的关键工具。
C = bitset(A, bit) C = bitset(A, bit, v)
A:输入数值,数据类型与bitget一致,支持整数或逻辑类型; bit:要设置的位的位置,最低位为第1位; v:可选参数,指定期望设置的位值,只能是0或1;若省略v,则默认将该位置为1; C:返回值,与A同形状的数组,数据类型与A一致,指定位已被修改。bitset通过“按位或”和“按位与非”操作实现置位和清0:
v或v=1):构造掩码2^(bit-1),执行A | mask,将目标位强制为1,其他位不变; v=0):构造掩码~(2^(bit-1)),执行A & mask,将目标位强制为0,其他位不变。A = 10; % 二进制:1010(第1位0,第2位1,第3位0,第4位1) C = bitset(A, 3); % 将第3位置1,变为1010 | 0100 = 1110(14) disp(['修改后的值: ', num2str(C), '(二进制: ', dec2bin(C, 4), ')']);
输出:
修改后的值: 14(二进制: 1110)
A = 14; % 二进制:1110 C = bitset(A, 2, 0); % 将第2位置0,变为1110 & 1101 = 1100(12) disp(['修改后的值: ', num2str(C), '(二进制: ', dec2bin(C, 4), ')']);
输出:
修改后的值: 12(二进制: 1100)

A = [1, 3; 5, 7]; % 二进制:1(0001), 3(0011); 5(0101), 7(0111)
C = bitset(A, 3, 1); % 将所有元素的第3位置1
disp('修改后的矩阵:');
disp(C);
disp('二进制形式:');
disp(dec2bin(C, 4));
输出:
修改后的矩阵:
5 7
5 7
二进制形式:
0101
0111
0101
0111
在实际应用中,bitset和bitget常常需要配合使用,实现对二进制位的“读取-修改-写入”操作,提取某一位的值后进行判断,再根据判断结果修改该位。
假设我们需要一个简单的奇偶校验位:确保数据字节(8位)中“1”的个数为偶数,校验位通常放在最高位(第8位),其值由低7位决定。
data = 0b1101011; % 7位数据,十进制:107 % 提取低7位的值 low7_bits = bitget(data, 1:7); % 计算低7位中“1”的个数 count_ones = sum(low7_bits); % 校验位=“1”的个数取反(偶数个1则校验位为0,奇数个则为1) parity_bit = 1 - mod(count_ones, 2); % 将校验位设置到第8位 data_with_parity = bitset(uint8(data), 8, parity_bit); disp
本文由用户投稿上传,若侵权请提供版权资料并联系删除!