精华内容
下载资源
问答
  • 易语言十进制浮点数转换二进制源码,十进制浮点数转换二进制,浮点数转二进制,进制转换
  • 与上一篇进制浮点数-半精度二进制浮点数转换相对应,这里为了进行验证,又写了一个半精度二进制浮点数-进制浮点数转换的MATLAB代码,其实就是个逆过程,上一篇的链接在 ... 目前没有发现问题,数据转换是肯定存在...

    与上一篇十进制浮点数-半精度二进制浮点数转换相对应,这里为了进行验证,又写了一个半精度二进制浮点数-十进制浮点数转换的MATLAB代码,其实就是个逆过程,上一篇的链接在

    https://blog.csdn.net/qq_34365687/article/details/106087767

    目前没有发现问题,数据转换是肯定存在误差的,代码如下

    function [dec_num] = half_float2dec(half_float_num)
        Decimal = 0;
        if(half_float_num(1)=='1')
            sign = 1;
        else
            sign = 0;
        end
        Decimal_bin = half_float_num(7:16);
        for i = 1:length(Decimal_bin)
            if(Decimal_bin(i) == '1')
                Decimal = 2^(-i) + Decimal
            end
        end
        dec_num = (-1)^sign*(1 + Decimal)*2^(bin2dec(half_float_num(2:6)) - 15);
    end
    
    展开全文
  • 本代码实现了进制浮点数与IEEE745标准的32位二进制浮点数的互相转换二进制浮点数有十六进制和二进制两者表示形式,
  • 易语言十进制浮点数转换二进制源码.rar
  • 半精度二进制浮点数的大批量转换,发现没有现成的转换代码,就根据原理用matlab撸了一个,与在线转换器对比暂时没有发现bug,通过写blog的方式debug(小黄鸭调试法),也欢迎大家帮我找茬,一起debug. 半精度浮点数...

    最近设计用到了十进制浮点数->半精度二进制浮点数的大批量转换,发现没有现成的转换代码,就根据原理用matlab撸了一个,与在线转换器对比暂时没有发现bug,通过写blog的方式debug(小黄鸭调试法),也欢迎大家帮我找茬,一起debug.
    半精度浮点数数据格式16bit,遵循IEEE754的标准,1bit符号位,5bit阶码,10bit尾数。
    关于浮点数的计算可以看下面这个blog,写的很详细:

    https://blog.csdn.net/fwb330198372/article/details/70238982

    IEEE754 在线计算器链接,可以benchmark:

    http://weitz.de/ieee/

    下面是matlab函数:

    function [half_float_num] = dec2half_float(input_num)
    %UNTITLED2 此处显示有关此函数的摘要
    %   此处显示详细说明
    	integer = abs(fix(input_num));
    	Decimal = abs(input_num) - integer;
    	if(input_num >=0)
    	    sign = '0';
    	else
    	    sign = '1';
    	end
    	integer_bin = dec2bin(integer);
    	Decimal_bin = dec2bin(0,24);
    	
    	d(1) = Decimal;
    	for i = 1:24
    	    if(d(i)*2 >= 1)
    	        d(i+1) = d(i)*2 - 1;
    	        Decimal_bin(i) = '1';
    	    else
    	        d(i+1) = d(i)*2;
    	        Decimal_bin(i) = '0';
    	    end
    	
    	end
    	
    	input_num2_bin = strcat(integer_bin,Decimal_bin);
    	if(abs(input_num)>=0.000061035)   %code ! = 00000
    	    for i = 1:length(input_num2_bin)
    	        if(input_num2_bin(i)=='1')
    	            pos = i;
    	            break;
    	        end
    	    end
    	    code = 15 + (length(integer_bin) - pos);
    	    code_bin = dec2bin(code,5); 
    	else
    	    code_bin = dec2bin(0,5);
    	end
    	if(abs(input_num)>=1)
    	    mantissa = input_num2_bin(2:11);
    	elseif(abs(input_num)<=0.000061035)
    	    mantissa = input_num2_bin(16:25);
    	else
    	    mantissa = input_num2_bin(16 - code + 1:25-code + 1);
    	end
    	half_float_num = strcat(sign,code_bin,mantissa);
    end
    
    

    附python版本:

    def dec2half (input_num):
        sign = '0'
        if(input_num<0):
            sign = '1'
        else:
            sign = '0'
            
        integer = abs(int(input_num))
        Decimal = abs(input_num) - integer
        decimal = np.zeros(25)
        decimal[0] = Decimal
        integer_bin = bin(integer)[2:]
        Decimal_bin = ''
        
        for i in range(0,24):
            if(decimal[i]*2 >= 1):
                decimal[i+1] = decimal[i]*2 - 1
                Decimal_bin = Decimal_bin + '1'
            else:
                decimal[i+1] = decimal[i]*2
                Decimal_bin = Decimal_bin + '0'       
                   
        input_num2_bin = integer_bin + Decimal_bin   
        if(abs(input_num)>=0.000061035):   
            for i in range (0 , len(input_num2_bin)):
                if(input_num2_bin[i]=='1'):
                    pos = i
                    break    
            code = 15 + (len(integer_bin) - pos) - 1
            code_bin = bin(code)[2:]
            while(len(code_bin)<5):
                code_bin = '0' + code_bin
        else:
            code_bin = '00000'    
            
        if(abs(input_num)>=1):
            mantissa = input_num2_bin[1:11]
        elif(abs(input_num)<=0.000061035):
            mantissa = input_num2_bin[15:25]
        else:
            mantissa = input_num2_bin[16 - code :25-code + 1]  
            
        half_float_num = sign + code_bin + mantissa
        return(half_float_num)
    
    展开全文
  • 易语言源码易语言十进制浮点数转换二进制源码.rar
  • 易语言十进制浮点数转换二进制源码
  • 二进制浮点数进制浮点数的转换IEEE给出了一套浮点数值的标准,即IEEE 754。该标准给出了单精度(32位)和双精度(64位)浮点数值的表示方法以及如何对其进行操作。本文简单的给出了从二进制的浮点数到进制浮点数的...

     

    二进制浮点数向十进制浮点数的转换

    IEEE给出了一套浮点数值的标准,即IEEE 754。该标准给出了单精度(32)和双精度(64)浮点数值的表示方法以及如何对其进行操作。本文简单的给出了从二进制的浮点数到十进制浮点数的转换算法。

    根据IEEE 754,浮点数的二进制存储格式被分为三个部分:符号位,指数位和数据位。单精度和双精度浮点数的区别除了总位数长度的区别之外就是基于该长度对其三个部分(符号位,指数位和数据位)的划分。

    l       单精度

    单精度浮点数由32位组成,从左到右,第一位是符号位,后续的8位是指数位,最后23位是数据位,如下:

    S EEEEEEEE  FFFFFFFFFFFFFFFFFFFFFFFF

    1     8                  23                

    对应表示的数值V可以解释为:

    if (E =255 and F != 0) then V = NaN(“Not a Number”);

    if (E =255 and F =0 and S = 1) then V = -Infinity;

    if (E =255 and F =0 and S = 0) then V = Infinity;

    if (255>E>0 ) then V = (-1)**S*2**(E-127)*(1.F)

    if (E = 0 and F != 0) then V = (-1)**S*2**(-126)*(0.F)

    if (E = 0 and F = 0 and S = 1) V = -0;

    if(E = 0 and F = 0 and S = 0) V = 0;

    例如:

      0 00000000 00000000000000000000000 = 0

      1 00000000 00000000000000000000000 = -0

     

      0 11111111 00000000000000000000000 = Infinity

      1 11111111 00000000000000000000000 = -Infinity

     

      0 11111111 00000100000000000000000 = NaN

      1 11111111 00100010001001010101010 = NaN

     

      0 10000000 00000000000000000000000 = +1 * 2**(128-127) * 1.0 = 2

      0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5

      1 10000001 10100000000000000000000 = -1 * 2**(129-127) * 1.101 = -6.5

     

      0 00000001 00000000000000000000000 = +1 * 2**(1-127) * 1.0 = 2**(-126)

      0 00000000 10000000000000000000000 = +1 * 2**(-126) * 0.1 = 2**(-127)

      0 00000000 00000000000000000000001 = +1 * 2**(-126) *

                                           0.00000000000000000000001 =

                                           2**(-149)  (Smallest positive value)

    l       双精度

    双精度的浮点数长度是64位,其中一位是符号位,11位是指数位,以及52位的分数位。格式如下:

    S EEEEEEEEEEE  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

    1       11                                52                                     

    双精度浮点数对应的十进制数V可以根据下面的算法计算。

    If (E=2047 and F !=0) then V=NaN ("Not a number")

    If (E=2047 and F =0 and S = 1) then V=-Infinity

    If (E=2047 and F = 0 and S = 0) then V=Infinity

    If (0<E<2047) then V=(-1)**S * 2 ** (E-1023) * (1.F)

    If(E=0 and F != 0) then V=(-1)**S * 2 ** (-1022) * (0.F)

    If (E=0 and F = 0 and S = 1) then V=-0

    If (E=0 and F =0 and S = 0) then V=0

     

    注:在算法中的SEF分别表示相应格式中的如下数据

    S = S的数值

    E = EEE….E表示的整数

    F = (F/2)+(F/4)+(F/8)+…..表示的小数

    例如

           1 10101010 11110100000000000000000

           S = 1;

           E = 128+32+8+2 = 170

           F = 1/2 + 1/4 + 1/8 + 1/16 + 1/64

    l       引用

    1.         ANSI/IEEE Standard 754-1985, Standard for Binary Floating Point Arithmetic

     

    展开全文
  • 进制浮点数转二进制浮点数计算规则 (1)单精度二进制浮点数存储格式如下图: 那么一个单精度进制浮点数转二进制浮点数的规则是如何的呢?假设这里有一个小数为3.625,那么该小数对应的整数部分就是11,...

    十进制浮点数转二进制浮点数计算规则

       (1)单精度二进制浮点数存储格式如下图:

           那么一个单精度十进制浮点数转二进制浮点数的规则是如何的呢?假设这里有一个小数为3.625,那么该小数对应的整数部分就是11,小数部分就是101,那么该数表示成二进制就是11.101,由于我们需要表示成浮点二进制数,那么小数点要向左移动一位,那么变为1.1101,那么对应的浮点二进制整数部分就是127+1=128=0x80,小数部分为1101,由于该数是整数,所以符号位为0,将上述数字如图对号入座,其余空余的地方补1,可得转换后的数据是:0100 0000 0110 1000 0000 0000 0000 0000,对应的十六进制表示就是0x40680000,即3.625的单精度浮点二进制数表示就是0x40680000。

      (2)双精度二进制浮点数存储格式如下图:

          那么一个双精度浮点数的转换规则是怎样的呢?其实和单精度浮点数的转换机制类似,由(1)3.625对应的二进制数为11.101,小数点左移一位后为1.1101,整数部分就为1023+1=1024=0x800,小数部分为1101,符号位为0,按如图格式对号入座,其余部分补0,得到转换后的的数为0100 0000 0000 1101 000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000=0x400D000000000000,即3.625的双精度浮点二进制数表示就是0x400D000000000000。

       (3)便捷计算软件

          网上可以找到浮点数转换的便捷计算软件,非常方便,如下图这个软件:

           下载链接为:http://www.greenxf.com/soft/210343.html 

    展开全文
  • a=(int(input('请输入16进制浮点数数据:'),16)) b=bin(a) print(mConvertTo(b)) 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以...
  • --------------------------------------------- -- 时间:2019-01-11 -- 创建人:Ruo_Xiao ...-------------------------------------... 这两天在处理TCP发送数据的问题,对方发来4个字节的浮点数的16进制,当时脑袋...
  • 文章目录#十进制转换二进制数1、十进制整数转换二进制整数2、十进制小数转换二进制小数#浮点类型数据的存储#参考 #十进制转换二进制数   十进制转换二进制数时,由于整数和小数的转换方法不同,...
  • 十进制浮点数,整数部分转换二进制,采用除2取余法,将余数从低到高排列,即为整数的二进制数; 小数部分转换二进制,采用乘2取整法,将取整数顺序排列,即为小数的二进制数。 小数部分乘2直到小数部分为0,或取...
  • 注:该处的浮点数为正数,负数的情况大家可以做简单的修改。 import numpy as np accuracy = 4 # 小数部分精度 def dtb(num): #判断是否为浮点数 if num == int(num): #若为整数 integer = '{:08b}'.format...
  • 满意答案hs_vblack推荐于 2016.12.06采纳率:40%等级:9已帮助:413人:-) 终于解决。我写了个程序,只要结果是正确的就行了。环境: LINUX编译: gcc -test.c -lm结果测试:Please type in a binary number:101011....
  • 十进制转换为IEEE 单精度二进制浮点数(C代码) 介绍: IEEE 单精度浮点数分为三个部分 sign(符号位)exponent(8位) fraction(尾数 23位) 总共32位 这里举一个例子:例如将7转成IEEE单精度二进制...
  • IEEE标准的32位浮点数转换十进制的计算方法   下面是用笔记本电脑的MODTEST软件在COM 1口经232转485转换器转变为485口后连接到流量计算机,通过MODBUS协议读取到的流量计内部数据,下面通过分析,解释了如何...
  • 十进制整数转二进制 输入整数以补码形式显示 例如: input: 10 outout: 1010 正整数的补码为其原码,负数的补码为其模减去该负数的绝对值(模运算) 例如: input: -9 outout: s(1)1110111 //其中s(1)为符号位 ...
  • 如何将十进制浮点数 转换二进制浮点数,分为两部分: 1. 先将整数部分转换二进制, 2. 将小数部分转换二进制, 然后将整数部分与小数部分相加。  以 20.5 转换为例,20转换后变为10100;0.5 要转换二...
  • 求解下面这个数,第三行涂鸦标出来的数字,为什么转成二进制不是我列出来的那个结果,求教!
  • 首先,IEEE754表示的数由三部分组成,符号位:正数为0,负数为1 阶码位(2~9位):将十进制数表示为1.f*2^(e-127)=n,解得e,e的二进制数即为该数的阶码,尾数位(10-32位):将1.f的小数部分转为2进制所得的二进制数...
  • 首先将十进制浮点数转换为定点数,再转化为IEEE单精度浮点数。 例1:将5.25转化为IEEE单精度浮点数 ①将5.25转化为定点数 5——>0101 0.25——>0.01 5.25——>101.01 (十进制二进制,小数点之前除二取余...
  • 计算机内部的二进制浮点数加减运算计算机内部的二进制浮点数加减运算计算机内部的二进制浮点数加减运算十进制科学计数法的加法例子1.123×10^5 + 2.560×10^2=1.123×10^5 + 0.002560×10^5=1.12556×10^5=1.126×10...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,884
精华内容 21,553
关键字:

二进制浮点数转换十进制