信源编码的符号转换

一、背景

软件: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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值