实现原理
本文实现的是将十二位的有符号的二进制数转换为十进制数:
由于在数字在显示中,如果高位为0会在显示中被省去,所以,这里无法检测到每个数的位数都为12位,也就是无法全部检测到12位的符号位。
比如: 000011110000, 在显示的时候只会显示: 11110000
如果此时检测最高位是否为1, 就只会检测到第8位为1,检测为负数。
所以由于是将12位有符号位的二进制数转换,也就是说,它的范围为:[-2047,2047],正数的最大值: 0111 1111 1111.
只要检测到输出的值大于211-1, 就进行补码的转换。
实现代码
cstr = textread('C:\Users\Documents\0\Qin0.txt','%s'); % 输入txt文件
m = 12; % 12 bits
n = length(cstr); % 需要转换的数字个数
Qin0 = zeros(n,1);
for i=1:n
Qin0(i) = bin2dec( cstr{i} ); %将所有二进制数转换为无符号位十进制数
if(Qin0(i)>2047) % 如果结果大于2047
Qin0(i)=bin2dec(cstr{i})-2^m; % 转换为负数
end
end
代码结果:
输入的12位数字:
转换后的数字: