一、背景
软件:MATLAB R2016a
实验内容:十进制与二进制小数的互换
二、实验准备
例2.1 把11转换成二进制数
clear all;clc;
%例2.1 把11转换成二进制数
a=11;
b=dec2bin(a)
% dec2bin将十进制整数转换为其二进制表示形式
% binStr = dec2bin(D) 返回十进制整数 D 的二进制(即基数为 2)表示形式。
%输出参数 binStr 是一个字符向量,它使用字符 0 和 1 表示二进制位。
%如果 D 是数值向量、矩阵或多维数组,则 binStr 是二维字符数组。binStr 的每行表示 D 的一个元素。
% binStr = dec2bin(D,minDigits) 返回不少于 minDigits 位数的二进制表示。
%指定 dec2bin 返回的二进制最小位数。如果您指定需要更多位数,则 dec2bin 会填充输出。指定的位数较少,不填充
%从 R2020a 开始,dec2bin 函数使用 2 的二进制补码值来转换负数。
例2.2 求二进制数1011的十进制表述
bin2dec('1011')
% bin2dec将二进制整数的文本表示转换为双精度值
例2.3 把十进制小数0.7转换成二进制小数
%例2.3 把十进制小数0.7转换成二进制小数
c=dec_bin(0.7,8)
function y=dec_bin(D,N)
%十进制小数转换为二进制数,输入参数为D和N
% D为输入的十进制小数,N为指定转换后二进制的位数
if (D>1)|(N == 0)
%判断输入的有效性,仅处理大于0小于1的小数
%如有大于1的数,自行分割后,整数部分使用已有函数,再做加法
disp('error!');
return
end
count=0;
temp=D;
record=zeros(1,N);
while (N); % while 条件为 true 时重复执行的 while 循环
count=count+1; %长度小于N
if(count>=N) %限制while循环次数
N=0;
end
temp=temp*2; %小数转换为二进制,乘2取整
if temp>1
record(count)=1;
temp=temp-1;
elseif temp==1
record(count)=1;
N=0;
else
record(count)=0;
end
end
%将record的每一列的值拼接合成为数值
t=''; %初始空字符串
%按顺序一个个放入字符串t中
for i=1:length(record)
t=[t,num2str(record(1,i))]; % s = num2str(A) 将数值数组转换为表示数字的字符数组。输出格式取决于原始值的量级。
end
x=str2num(t);
y=sprintf('%.8f\n',x*10^(-8)); %根据N的大小改变位数输出格式
end
% X = str2num(txt) 将字符数组或字符串标量转换为数值矩阵。
%输入可以包含空格、逗号和分号,以指示单独的元素。如果 str2num 不能将输入解析为数值,则返回空矩阵。
例2.4 求二进制小数0.1011001100...的十进制表述
%小数点后的数字改写成矩阵形式
bit_decimal = [1,0,1,1,0,0,1,1,0,0];
integer = 0; %整数部分
decimal = 0; %小数部分
for i=1:length(bit_decimal)
decimal=decimal+bit_decimal(i)*(2^(-i));
end
d1=integer + decimal
format short
d2=round(d1,1)
例2.5 分析十进制0.7转换成二进制小数产生的误差
e=round(d2-d1,4)
三、实验任务
同下1,2为十进制数x=5.9的二进制转换
%2、编写程序实现十进制小数x=5.9的二进制转换
decimal=dec_bin(0.9,10);
integer=5; %整数部分
integer=dec2bin(integer);
param=str2num(integer)+str2num(decimal)
四、实验作业
1、编写程序实现十进制小数x=0.7的二进制转换,并分析其误差
clear all;clc;
%1、编写程序实现十进制小数x=0.7的二进制转换,并分析其误差
c=dec_bin(0.7,10)
bit_decimal = [1,0,1,1,0,0,1,1,0,0];
integer=0; %整数部分
decimal=0; %小数部分
for i=1:length(bit_decimal)
decimal=decimal+bit_decimal(i)*(2^(-i));
end
d1=integer + decimal
format short
d2=round(d1,1)
e=round(d2-d1,4)
2、编写程序实现十进制小数x=6.8的二进制转换
%2、编写程序实现十进制小数x=6.8的二进制转换
decimal=dec_bin(0.8,10);
integer=6; %整数部分
integer=dec2bin(integer);
param=str2num(integer)+str2num(decimal)
3、随机生成一个数组,使其元素介于0、1之间的小数,并将元素全部转换成二进制的小数
%3、随机生成一个数组,使其元素介于0、1之间的小数,并将元素全部转换成二进制的小数
n=input('请输入方阵A的阶n:') %求所需n阶方阵A
A=rand(n)
%按照行列顺序分别对每个元素转换成二进制
for i=1:n
for j=1:n
I(i,j)=str2double(dec_bin(A(i,j),10));
end
end
format long
%输出转换后的数组I
I