-
Matlab——二进制转十进制(包含小数转换)
2019-04-03 10:10:13由于需要,最近写了一个小程序,实现带小数的二进制转十进制,先看代码: clc clear all % 整数部分 bit1 = 3; bit_integer = [0,1,0]; % 小数部分 bit2 = 2; bit_decimal = [1,0]; intege...Matlab中有二进制转十进制的函数,“bin2dec”,示例如下:
但是这个函数只能进行整数转换,如果有小数的话:
由于需要,最近写了一个小程序,实现带小数的二进制转十进制,先看代码:
clc clear all % 整数部分 bit1 = 3; bit_integer = [0,1,0]; % 小数部分 bit2 = 2; bit_decimal = [1,0]; integer = 0; decimal = 0; % 计算整数部分 for i = 1 : bit1 integer = integer + bit_integer(i) * (2^(bit1 -i)); end % 计算小数部分 for j = 1 : bit2 decimal = decimal + bit_decimal(j) * (2^(-j)); end % 整合 param = integer + decimal;
程序其实很简单,就是按照二进制转十进制的规则进行转化,需要人为输入的地方就是整数部分、整数部分的比特位数,小数部分、小数部分的比特位数。
欢迎各位交流指正!
-
float类型的十六进制转换为十进制
2015-06-15 16:18:39该matlab程序可实现C语言的float类型十六进制转换为十进制,供大家参考。 -
进制转换,任意底对数的转换
2011-12-29 22:51:14matlab交互式程序,实现的是进制转换,任意底对数的转换 -
matlab实现从txt中读取16进制数据并转换为二进制01矩阵,处理后再转换为16进制输出到txt
2018-04-25 20:55:17我在互联网上找了很久,发现没有人发布关于matlab从txt文档中读取16进制数转换为矩阵,再转换为2进制数矩阵,再按位拆分为01矩阵,处理完成后再转换为16进制输出的方法,这个程序也可以改写成读入十进制,输出十进制... -
Matlab实现码元序列转化为二进制序列
2019-07-07 11:09:05用matlab实现一些简单的信号处理程序时,经常会碰到处理信息序列的情况,这些信息序列通常由N个码元所构成,而在做处理前我们常常需要将其做二进制转换。以下以八进制序列转二进制序列为例: origin = randi(8, 1,...用matlab实现一些简单的信号处理程序时,经常会碰到处理信息序列的情况,这些信息序列通常由N个码元所构成,而在做处理前我们常常需要将其做二进制转换。以下以八进制序列转二进制序列为例:
origin = randi(8, 1,Length)-1; % 八进制信息序列生成
x = reshape((de2bi(origin))’,1,3*(Length)); % 二进制信息流生成
randi(K,M,N)产生大小为1到K的M x N随机数矩阵,这里的信息为1 x Length的一条序列,即一串Length个码元的信息,每个码元有 0-7 八种出现可能,因此转化为二进制序列时每三位代表信息序列的一位,即二进制序列为1 x (3*Length);
de2bi 将十进制数矩阵转化为二进制数矩阵,但这里输出的矩阵的信息排序会从行变成列,
即Length x 3;矩阵外加上一个 ’ 号则表示转置矩阵,将行列进行互换,这样使得上述矩阵重排列为3 x Length的矩阵;
最后我们希望得到的是一串1 x (3*Length)的序列,因此只需利用reshape重新排列,
reshape(X,M,N)函数通过对原矩阵X按列逐个输入再按列逐个输出,最后生成M x N的矩阵。恢复也类似,如下:
y = reshape(x,3,Length); %变回码元个数
receive = (bi2de(y’))’; %最终信息流恢复 -
MATLAB求出不可约多项式(实现二进制加法、除法)
2017-09-12 12:39:11本资源用MATLAB实现求已知阶数多项式是否为不可约多项式。其中可以设置阶数最大值,即可求出该阶数以内的所有不可约多项式。本程序中涉及到二进制的加法,除法运算,以及二进制与十进制,矩阵,字符串之间的转换。 -
用java实现十进制与二进制小数的互转机制
2018-04-13 15:31:03用java实现十进制与二进制小数的互转机制 本篇博客主要讲述用java...1、 编写程序实现十进制小数x=0.7 的二进制转换,并分析其误差(即重新将二进制小数转成十进制小数,和原十进制小数进行比较。) 2、编程...用java实现十进制与二进制小数的互转机制
本篇博客主要讲述用java实现十进制与二进制小数的互转(不调用java自带的函数)。后期可能会用MATLAB实现,因为我们信息安全的一个实验是要求用MATLAB实现的。
要求
信息安全课程的一个实验要求
1、 编写程序实现十进制小数x=0.7 的二进制转换,并分析其误差(即重新将二进制小数转成十进制小数,和原十进制小数进行比较。)
2、编程实现十进制数 x=5.9的二进制转换。思路
第二小题的思路,就是将十进制分开为整数部分和小数部分分来实现。
实现
MATLA实现
%% clear clc n=0.7; m=20;%保留10位小数 %将十进制乘以2用floor取整,接着用其余数进行循环操作 d=char(mod(floor(n*2.^(1:m)),2)+'0');%char函数创建一个字符矩阵 d1=[d(1:end-m),'.',d(end-m+1:end)]%显示二进制转换小数 f=d-'0'; f1=sum(f./(2.^(1:m))) %% 二进制转换十进制 error = n-f1
java语言实现
执行环境:JDK1.8,IntelliJ IDEA 2017.3.4 x64。import static java.lang.System.out; /** * 实现二进制与十进制的互换 * @author Canlong * @time 2018/4/13 */ public class Test3 { /** * 1、 编写程序实现十进制小数x=0.7 的二进制转换,并分析其误差(即重新将二进制小数转成十进制小数,和原十进制小数进行比较。) 2、编程实现十进制数 x=5.9的二进制转换。 * @param args */ public static void main(String[] args){ //要转化的十进制小数 double x = 0.7; //将十进制小数转化为二进制 String binXStr = decXiao2Bin(x); //将二进制小数转化为十进制 double decX = bin2DecXiao(binXStr); out.println("误差为:"+(x-decX)); //将十进制数转化为二进制 double decX1 = 5.9; int decInt = (int) Math.floor(decX1); double decXiao = decX1-decInt; String binInt = decInt2Bin(decInt); String binX = decXiao2Bin(decXiao); out.println("5对应的二进制为:"+binInt); out.println("5.9对应的二进制为:"+binInt+"."+binX); } //将十进制整数转换为二进制 public static String decInt2Bin(int decInt){ int index = 0; int rem = 1; String binStr=""; while(decInt!=1){ rem = decInt%2; decInt = decInt/2; binStr += Integer.toString(rem); if(decInt == 1){ binStr+=Integer.toString(decInt); } } return binStr; } /** * 将十进制小数转化为二进制 */ public static String decXiao2Bin(double x){ //精确位数 int accurate = 100; int[] binX = new int[accurate]; String binXSB=""; double x1 = x; double x2=0; for(int i=0;i<binX.length;i++){ x2 = x1+x1; x1 =Math.floor(x2); binX[i]=(int)x1; x1=x2-x1; binXSB += Integer.toString(binX[i]); } String binXStr = binXSB.toString(); out.println(x+"的近似二进制数为(精确到小数点后"+accurate+"位):"+binXStr); return binXStr; } /** * 将二进制小数转化为十进制 * @param binXStr 二进制小数 * @return 十进制小数 */ public static double bin2DecXiao(String binXStr){ double decX = 0.0; //位数 int k =0; for(int i=0;i<binXStr.length();i++){ int exp = binXStr.charAt(i)-'0'; exp = -(i+1)*exp; if(exp!=0) { decX += Math.pow(2, exp); } } out.println("二进制小数为;"+binXStr+"。\r\n其对应的十进制为:"+decX); return decX; } }
结果
误差分析:
测试了多次,java代码和matlab中将十进制小数转化为二进制小数,如果使用double来存储,最多只能转化到二进制到小数点后53位,再往后的数都为0。而且由于double类型的数值,java只能存储到小数点后16位,只要在这个范围内,利用以上的转化代码,产生的误差都为0。至于为什么利用数组存储二进制也只能存储到二进制数后53位,该原因还有待探索。初步怀疑由于十进制小数转化为二进制小数时不断减去整数部分,最终导致小数部分很少,即使进行了多次加倍,仍然无法达到1或者是计算机存储某个小数最多的二进制小数就是小数点后53位。
后来经过输出每一步的转化的十进制小数,发现每次都在第50步左右,十进制小数就变成了0.5,所以原因应该是只要是十进制小数为小数点16位以内,都可以通过50次加倍(加倍前去掉整数部分)变成0。总结
总的来说,这个实现起来并没有太大难度,只是由于自己对于方法运行的不熟悉,而导致自己写了很多多余的代码的和浪费了很多时间才能把这个课堂实验做完。下次有机会再完善一下。至于实现的原理,也在下次有机会的时候再说。其实java内部有函数实现十进制和二进制的互换的,但是经过自己把二进制和十进制的转换从原理级别上去实现后,能够锻炼了自己的思维能力。经过这次的实践,发现自己对于二进制与十进制转化的理论还没有太熟悉,java实现起来也效率极低。不过经过这次实践,我对这个转换的理论和实践部分的理解都加深了不少,后面会继续学习。
-
基于MATLAB语言的RFID二进制防冲突法识别过程仿真程序
2018-04-25 20:37:56压缩包里有一个内含1000个24位十六进制数的txt文件,假定这1000个数据为当前的RFID标签,本程序实现了从文件读取数据,转换格式后进行识别,并转换为原格式后按识别顺序输出到txt文档中,附带了记录程序运行时间的... -
简单的程序工具:matlab实现香农编码
2020-06-12 21:18:37香农编码的规则非常简单,用matlab实现起来也非常简单~就当作做作业时候的计算器啦。 代码如下: 辅助的函数: function y = dectobin(num,L) %十进制小数转换为指定位数的二进制数 %num为输入的十进制小数 %L为...本来想从网上找现有的代码省点时间...但是最后看了很多代码还是自己各种修改重写。
香农编码的规则非常简单,用matlab实现起来也非常简单~就当作做作业时候的计算器啦。
代码如下:
辅助的函数:
function y = dectobin(num,L) %十进制小数转换为指定位数的二进制数 %num为输入的十进制小数 %L为指定转换后二进制的位数 i = 0; bin = zeros(1,L); for k = 1:L i = i+1; num = num * 2;%小数转换为二进制,乘2取整 if num >= 1%乘积大于一 bin(i) = 1;%二进制此位为1 num = num - 1; else bin(i) = 0; %否则,二进制此位为0 end if(i >= L)%截取所需位数 break; end end y = bin;
主函数:
function [ s_code,ave_L ] = Shannon_code( p ) %香农编码 %p为降序排列的概率分布(便于需编码字符与输出编码对应) %s_code储存香农编码 %ave_L为平均码长 px = sort(p,'descend');%按降序排列 N = length(px);%需编码的字符数目 ave_L = 0; s_code={}; for i = 1:N %求累加概率 p_sum = 0; if (i==1) p_sum=0; else for k = 1:i-1 p_sum = p_sum + px(k); end end %求码长 if (i == 1) L = ceil(-log2(px(i))); %向上取整 y = zeros(1,L); %全0 else L = ceil(-log2(px(i)));%L为码长 y = dectobin(p_sum,L);%十进制小数转化为二进制,截取L位 end %求平均码长 ave_L = ave_L + px(i) * L; s_code{i}=y; end
完成~
这个程序真的超级简单啊,最近一定要花时间写一篇有关任意进制哈夫曼编码matlab实现程序的思路的文章!毕竟好不容易写出来都被自己给机智到了嘿嘿嘿~
-
循环冗余校验(CRC)的MATLAB实现
2020-09-19 11:18:10于是,想自己动手实现该网站计算CRC校验的功能,网站提供的在线计算工具是以十六进制来表示输入参数和结果的,为了方便MATLAB实现,本文提供的程序以二进制表示,二进制转换十六进制应该很容易实现。 运行结果 网站... -
将bmp图像转换为CCS可以识读的dat文件,Matlab实现
2015-01-24 19:53:20dat文件头为 1651 1 80000000 0 10 固定标识 数据格式 基地址 页类型 长度 ...数据格式:1-十六进制 2-十进制 3-十进制长整型 4-十进制浮点型 页类型: 0-数据 1-程序 ? 长度: 装入数据的长度 -
MATLAB模式识别实现指标分类评估预测如环境业绩等-Training_NPR.m
2019-08-13 02:02:48把数据导入到MATLAB程序里close all clear all clc x=xlsread; y=xlsread; inputs = x'; targets = y';复制代码 我们再谈谈网络的训练和评估: 你可以使用MATLAB自带的模式识别工具箱界面来导入数据、调整参数等... -
MATLAB模式识别实现指标分类评估预测如环境业绩等-new_data.xls
2019-08-13 02:02:37把数据导入到MATLAB程序里close all clear all clc x=xlsread; y=xlsread; inputs = x'; targets = y';复制代码 我们再谈谈网络的训练和评估: 你可以使用MATLAB自带的模式识别工具箱界面来导入数据、调整参数等... -
MATLAB模式识别实现指标分类评估预测如环境业绩等-training_data.xls
2019-08-13 02:02:27把数据导入到MATLAB程序里close all clear all clc x=xlsread; y=xlsread; inputs = x'; targets = y';复制代码 我们再谈谈网络的训练和评估: 你可以使用MATLAB自带的模式识别工具箱界面来导入数据、调整参数等... -
多级树集合分裂(SPIHT)算法的过程详解和Matlab实现(5)编码过程——精细扫描
2007-12-09 03:13:00本文给出SPIHT编码的精细扫描程序,其中包括一个能够将带小数的十进制数转换为二进制表示的函数,这个转换函数可以实现任意精度的二进制转换,特别是将小数部分转换为二进制表示。希望对有需要的朋友有所帮助。下一... -
MATLAB模式识别实现指标分类评估预测如环境业绩等-Use_For_Predict.m
2019-08-13 02:02:58把数据导入到MATLAB程序里close all clear all clc x=xlsread; y=xlsread; inputs = x'; targets = y';复制代码 我们再谈谈网络的训练和评估: 你可以使用MATLAB自带的模式识别工具箱界面来导入数据、调整参数等... -
多级树集合分裂(SPIHT)算法的过程详解和Matlab实现(5)编码过程——精细扫描...
2007-12-09 03:13:00本文给出SPIHT编码的精细扫描程序,其中包括一个能够将带小数的十进制数转换为二进制表示的函数,这个转换函数可以实现任意精度的二进制转换,特别是将小数部分转换为二进制表示。希望对有需要的朋友有所帮助。下一... -
MATLAB_Simulink建模与仿真[张德丰][程序源代码].zip
2019-08-25 01:30:261.8 MATLAB程序设计 1.8.1 程序类型 1.8.2 程序流程控制 1.8.3 程序设计原则 第2章 MATLAB界面设计 2.1 MATLAB图形用户界面设计 2.1.1 图形用户界面简介 2.1.2 图形用户界面对象的结构 2.1.3 启动图形用户界面 ... -
MATLAB GUI设计学习手记(罗华飞)【电子书籍+配套程序】
2019-02-28 10:30:39本章主要介绍了MATLAB的基本程序元素、几种设计中经常使用的数据类型和矩阵操作函数,以及程序设计的5种句型(for、while循环结构、if、switch条件分支结构和try…catch结构)。以后以专题形式,分别详细讲解了编程... -
matlab部分题解分析.pdf
2020-08-18 14:02:30一组电压值为 x=[0:0.5:4]经过一个把-55 伏正电压转换为 12位包括符 号位二进制的 A/D 转换器求输出的量化电压的二进制代码并求经 D/A 转换后的量化电压 值 解解题的程序为 x=[0:0.5:4]; % 输入量数组 y=bqtize(x,... -
Matlab扩展编译!!
2011-11-02 21:28:55MATLAB支持的混合编译一本有以下几种: (1)使用MATLAB引擎。通过matlab引擎,采用客户机的计算方式,与后台MATLAB连接,实现命令和数据的传输。这也是matlab功能支持最全面的...将MATLAB的程序编译成二进制COM组件来 -
MATLAB混合编程与工程应用.pdf
2010-05-19 10:32:481.7 MATLAB 应用程序接口介绍26 1.8 常见的混合编程方法简介29 第2 章 MATLAB 混合编程中的数据交流33 2.1 文件的打开和关闭34 2.1.1 文件的打开34 2.1.2 文件的关闭35 2.2 文本数据35 2.2.1 从文本文件中读取数据36... -
基于MATLAB的实时数据采集与分析研究
2009-09-22 21:37:42根据各种非电或电信号的特征,利用相应的归一化技术,将其转换为可真实反映事物特征的电信号后,经A/D转换器转换为计算机可识别的有限长二进制数字编码,以此作为研究自然科学和实现工业实时控制的重要依据,实现对... -
matlab混合编程软件matcom4.5
2010-11-15 21:37:36这种方法简单方便,但运行时出现一个控制台窗口,而且由于VC和MATLAB之间不能交互,通用性差,仅适用于VC调用MATLAB实现图形显示的场合。 (3) 通过Visual MATcom工具条,使用Add-in,这种方法提供了MATLAB和VC... -
hslogic算法仿真-基于matlab的图像LBP特征提取算法的仿真
2019-03-26 13:37:12% % 程序实现的功能: 对示例图像进行处理,并提取它的LBP特征 % %----------------------------------------------—————————————— clc clear; close all; %读取图像的RGB值,并转换为高精度的二维... -
【MATLAB R2014a完全自学一本通】-第一部分(共两部分)真正的入门、提高、实践
2016-04-24 13:24:381.1.5 MATLAB 应用程序简介 1.2 MATLAB R2014a 的目录结构 1.3 MATLAB R2014a 的工作环境 1.3.1 菜单/工具栏 1.3.2 命令行窗口 1.3.3 工作区 1.4 MATLAB R2014a 的通用命令 1.5 MATLAB R2014a 的文件... -
【MATLAB R2014a完全自学一本通】-第二部分(共两部分)真正的入门、进阶、实践
2016-04-24 14:04:0411.1.4 MATLAB 图像类型转换 11.1.5 MATLAB 图像数据读/写 11.2 图像显示 11.2.1 标准图像显示技术 11.2.2 特殊图像显示技术 11.3 图像运算 11.3.1 代数运算 11.3.2 空间变换 11.3.3 图像配准 11.4... -
vc程序合集0007.rar
2012-06-12 00:40:242012-06-11 23:23 325 十进制转换成二进制.cpp 2012-06-11 23:46 268,541 如何在VC 中用MFC进行OpenGL编程.pdf 2012-06-11 23:34 1,068,862 常见设计模式的解析和实现.rar 2012-06-11 23:22 9,811 数字转中文.rar ... -
基于STM32的函数信号发生器设计(下:软件设计)
2015-05-30 23:35:55转载请注明出处: 下篇将介绍整个STM32函数信号发生器系统软件设计部分,将着重介绍设计逻辑思路以及重点代码 本文将不对STM32初始化、中断设置、IO口配置部分进行...实现上述波形的matlab程序代码: clear; clc T=1;