1、其第31 bit为符号位,为0则表示正数,反之为复数,其读数值用s表示;
2、第30~23 bit为幂数,其读数值用e表示;
3、第22~0 bit共23 bit作为系数,视为二进制纯小数,假定该小数的十进制值为x;
则按照规定,该浮点数的值用十进制表示为:
= (-1)^s * (1 + x) * 2^(e - 127)
对于49E48E68来说,
1、其第31 bit为0,即s = 0
2、第30~23 bit依次为100 1001 1,读成十进制就是147,即e = 147。
3、第22~0 bit依次为110 0100 1000 1110 0110 1000,也就是二进制的纯小数0.110 0100 1000 1110 0110 1000,其十进制形式为0.78559589385986328125,即x = 0.78559589385986328125。
这样,该浮点数的十进制表示
= (-1)^s * (1 + x) * 2^(e - 127)
= (-1)^0 * (1+ 0.78559589385986328125) * 2^(147-127)
= 1872333
-
十进制浮点数转化为二进制的Python代码
2020-09-28 17:25:11#十进制浮点数转二进制 def dectbin(num): # 判断是否为浮点数 if num == int(num): # 若为整数 integer = '{:b}'.format(int(num)) return integer else: # 若为浮点数 # 取整数部分 integer_part = int...十进制转化为二进制的逻辑:
1、整数部分:
如图所示,便是浮点数中十进制整数部分转化为二进制的逻辑
整数35,转化为二进制数为1000112、小数部分
例如:
0.25的二进制:
0.252=0.5 取整是0
0.52=1.0 取整是1即0.25的二进制为 0.01 ( 第一次所得到为最高位,最后一次得到为最低位)
0.8125的二进制:
0.81252=1.625 取整是1 (整数部分为1)
0.6252=1.25 取整是1
0.252=0.5 取整是0 (整数部分为0)
0.52=1.0 取整是1 (当小数乘以2正好为1时,转化break)即0.8125的二进制是0.1101(第一次所得到为最高位,最后一次得到为最低位)
3、代码
#十进制浮点数转二进制 def dectbin(num): # 判断是否为浮点数 if num == int(num): # 若为整数 integer = '{:b}'.format(int(num)) return integer else: # 若为浮点数 # 取整数部分 integer_part = int(num) # 取小数部分 decimal_part = num - integer_part # 整数部分进制转换 integercom = '{:b}'.format(integer_part) #{:b}.foemat中b是二进制 # 小数部分进制转换 tem = decimal_part tmpflo = [] # for i in range(accuracy): A = True while A: tem *= 2 tmpflo += str(int(tem)) #若整数部分为0则二进制部分为0,若整数部分为1则二进制部分为1 #将1或0放入列表 if tem > 1 : #若乘以2后为大于1的小数,则要减去整数部分 tem -= int(tem) elif tem < 1: #乘以2后若仍为小于1的小数,则继续使用这个数乘2变换进制 pass else: #当乘以2后正好为1,则进制变换停止 break flocom = tmpflo return integercom + '.' + ''.join(flocom) if __name__ == '__main__': number = 5 result = dectbin(number) print(f'{number}的二进制数为:{result}')
代码中关于format进制的知识点见链接:
Python——format格式化函数number = 10
输出:10的二进制数为:1010
number = 0.8125
输出:0.8125的二进制数为:0.1101
number = 2020.928
输出:2020.928的二进制数为:11111100100.111011011001000101101000011100101011000001
-
16进制浮点数与十进制的转化
2013-04-10 15:17:59对于大小为32-bit的浮点数(32-bit为单精度,64-bit浮点数为双精度,80-bit为扩展精度...3、第22~0 bit共23 bit作为系数,视为二进制纯小数,假定该小数的十进制值为x; 则按照规定,该浮点数的值用十进制表示为对于大小为32-bit的浮点数(32-bit为单精度,64-bit浮点数为双精度,80-bit为扩展精度浮点数), -
为什么十进制浮点数常常无法用二进制精确表示?
2019-05-27 22:39:00十进制浮点数很好理解,就是我们日常所见的数字,比如3.3,2.56等数字,都是十进制的。那么,二进制小数该如何表示呢? 首先,我们先看下整数,对于十进制整数10,用二进制... 比如,对于3.3,如何转化为二进制表...十进制浮点数很好理解,就是我们日常所见的数字,比如3.3,2.56等数字,都是十进制的。那么,二进制小数该如何表示呢?
首先,我们先看下整数,对于十进制整数10,用二进制表示就是1010=1*2^3+0*2^2+1*2^1+0*2^0,所以对于整数,十进制和二进制之间的转化还是挺直接的。那么对于小数,该如何转化呢?
比如,对于3.3,如何转化为二进制表示?对此我们首先应该理解3.3是什么意思,很显然,3.3=3+0.3,关键在于0.3如何理解。在十进制中,0.3的意思就是十份中的3份,0.33就是100份中的33份,我们平常很自然的在脑海里就形成了这种意识,这种意识的关键之处就在于,对于十进制中的小数点后一位小数,其最多为10份,两位小数最多为100份,3位为1000份...所以,对于二进制,同样的,要表示0.3,我们需要先表示出10所需要的位数,然后再取其中的3份即可。但是有一个问题是,在二进制中,小数点后,一位小数最多为2,两位最多为4,3位为8,n位为2^n...所以是始终无法为10的,又因为3/10是无法约分的,所以我们实际上在二进制中,无法精确表示十进制数3.3。通过前述,我们知道,十进制浮点数常常无法用二进制精确表示的原因就在于10^n和2^m之间没有一个整数n,m之间的对应关系。从而我们可以推论,8进制浮点数一定可以用二进制浮点数精确表示,因为8^n总是可以用2^3n来转换。
但是,十进制小数中,比如3.5,由于0.5=5/10=1/2,可以约分到2^1,从而这时便可以用二进制准确表示,这时3.5的二进制浮点数表示11.1=1*2^1+1*2^0+1/(2^1)=1*2^1+1*2^0+1*2^(-1)。同理,由于0.25=25/100=1/4,故5.25=101.01=1*2^2+0*2^1+1*2^1+(0*2^1+1*2^0)/2^2=1*2^2+0*2^1+1*2^1+0*2^(-1)+1*2^(-2)。
-
C语言不用指针只用数组和移位操作将二进制转化为十进制IEEE32浮点数
2018-02-26 19:50:30#include #include #include int main(int argc,char **argv){ float f=-3.14; unsigned char *const pf=(unsigned char*)&f,*p; unsigned char table[4]; unsigned i;//cycle variable unsigned whole_value;#include<stdio.h> #include<stdlib.h> #include<math.h> int main(int argc,char **argv){ float f=-3.14; unsigned char *const pf=(unsigned char*)&f,*p; unsigned char table[4]; unsigned i;//cycle variable unsigned whole_value; unsigned sym_value;//symbol bit unsigned exp_value;//exponent unsigned mat_value;//mantissa //show all bytes of f printf("the value of variable f is: %g\t\n",f); printf("all bytes of variable f are(from high byte to low byte):\n"); for(p=pf+3;p>=pf;printf("0x%0x\t",*p--)); printf("\012"); //save the above variables to array(low byte first) for(p=pf,i=0;i<4;table[i++]=*p++); //anti solution the variable of f(solution 1) sym_value=table[3] >> 7; exp_value=((table[3] & 0x7F) << 1) + (table[2] >> 7); mat_value=((table[2] & 0x7F) << 16) + (table[1] << 8) + table[0]; printf("the value of solution 1:%g\n",pow(-1,sym_value)*(1+mat_value*pow(2,-23))*pow(2,exp_value-127)); //anti solution the variable of f(solution 2) whole_value=(table[3] << 24) + (table[2] << 16) + (table[1] << 8) + table[0]; sym_value=whole_value >> 31; exp_value=whole_value << 1 >> 24; mat_value=whole_value << 9 >> 9; printf("the value of solution 2:%g\n",pow(-1,sym_value)*(1+mat_value*pow(2,-23))*pow(2,exp_value-127)); return EXIT_SUCCESS; }
-
python实现浮点数二进制与十进制之间的转换
2020-05-18 14:56:03#二进制转化为十进制浮点数 def todecimal(n): ''' 把一个带小数的二进制数n转换成十进制 小数点后面保留pre位小数 ''' # number1 表示二进制数,number2表示十进制数 string_number1=str(n) decimal = 0 # ... -
2009-08-12 17:19 16进制浮点数与十进制的转化 (转载)
2013-12-26 11:51:0016进制浮点数与十进制的转化 对于大小为32-bit的浮点数(32-bit为单精度,64-bit浮点数为双精度,... 3、第22~0 bit共23 bit作为系数,视为二进制纯小数,假定该小数的十进制值为x; 则按照规定,该浮点数的值用... -
AIIC学习日记-十进制浮点数预处理为二进制定点数
2020-07-05 14:38:18我第一件事情是将这两个数据从定点数转化为二进制数,然后将这两个数据作为 coe文件导入BRAM ip核中。 但是我发现我好像不会定点数了,哭。十进制浮点数转成二进制(IEEE 754 在线计算器) 对于float单精度来说,32bit... -
利用EXCEL VBA指定将十进制浮点数转换为二进制数
2009-05-30 21:17:001.EXCEL 自带的工具/加载宏/分析工具/ 中的确有类似函数可将十进制数轻松转化为二进制。可是该函数的致命缺点是只能装换 -512~511之间的整数,超过此范围的数则无能为力。所以我们只能自己利用vba写个可用的函数。... -
《程序员教程(第三版)》学习笔记——01.十进制浮点数转化为IEEE754标准单精度浮点数
2013-09-17 12:53:36工业标准IEEE754: 1985年IEEE(Institute of Electrical...P为阶码,通常用移码表示,M为尾数,用原码表示,根据二进制的规格化方法,最高数字位总是1,该标准将这个1缺省存储,使得尾数表示范围比实际存储的多一位。 -
java浮点数转二进制_浮点数转换成二进制
2021-02-13 01:59:33因为要参加软考了(当然也只有考试有这种魅力),我得了概浮点数转化为二进制表示这个最难的知识点(个人认为最难)。俺结合大量的从网上收集而来的资料现整理如下,希望对此知识点感兴趣的pfan有所帮助。基础知识:十... -
二进制与十进制整数,浮点数相互转换
2019-03-16 00:02:22整数转化为二进制 1.正整数用源码表示 2.负整数用绝对值的补码表示(将绝对值取反+1) 如-50用50的补码表示 50的源码为00000000000000000000000000110010 反码则为11111111111111111111111111001101 补码为反码+... -
位运算test1——java实现浮点数转化为二进制
2021-01-13 16:13:16十进制整数转化为k进制用除法,小数(浮点数)转化为k进制则用乘法 **乘的或者除的数为k ** 小数点左边第一位是几就添加几,比如上面0.625乘以2得到1.25,则得到0.1 然后抹掉小数点左边第一位,即将 -
js 单精度浮点数转10进制_JavaScript 十进制小数转为二进制精度问题及解决方案...
2020-12-24 05:55:39十进制小数转为二进制小数方法拿 173.8125 举例如何将之转化为二进制小数。①. 针对整数部分 173,采取除 2 取余,逆序排列;173 / 2 = 86 ... 186 / 2 = 43 ... 043 / 2 = 21 ... 1 ↑21 / 2 = 10 ..... -
对浮点数的进制转化,利用栈和队的进制实现
2018-05-22 17:16:04计算机可以用二、十、八以及十六四种数制表示数据,利用栈的特性设计程序自动实现数制之间的转化。需要注意的是,在程序中要能实现带小数部分的数值的转化。思想:本实验要求利用栈来实现数值转换,关于数值转换... -
使用Python二进制与十进制之间的转化,可以操作浮点数!
2010-10-09 13:57:00贴回来只是为了集中下资料。 我自己写的,算法就是课本上讲的转化的方式。 代码如下:... 这个程序用来将十进制数转化为二进制数,也可以转化浮点数 用法: mybin(float, bit=10 -
RGB值转化为浮点数和16进制
2018-09-21 16:30:38RGB(169,69,124)转化为[0,1]浮点数和16进制 解: 浮点数:因为此R、G、B取值都为0~255,将169、69、24分别除以255[0,1]之间的浮点数 十进制:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16进制:1 2 3 4 5 6 7 8 9 A... -
计算机中二进制转化、二进制移位以及阶码、尾数等概念
2020-09-22 12:14:16计算机中使用浮点数表示实数 x ,实际存放的并非 x 的算术值,而是近似值 其中 q 称尾数,是一个有限的二进制数,满足1/...二进制转换为十进制: 整数采用构造商序列和余序列如: 12=2*6+0 6=2*3+0 3=2*1+1 ... -
浮点数二进制计算
2019-05-11 14:05:51十进制的小数转换成二进制:小数部分和2相乘,取整数,不足1取0,每次相乘都是小数部分,顺序看取整后的数就是转化结果 比如:0.432*2=0.864取整0 0.864*2=1.728取1 让都是截取小数部分 0.728*2=1.456 因为0.... -
单精度浮点数转化为10进制数的原理
2020-09-17 17:58:41比如10,他的单精度浮点数时41 20 00 00,先将其从16进制转换为10进制,就是65 32 00 00,再把他们对应的8位二进制数写出来01000001 00100000 00000000 00000000一共32位(32位是单精度,64位是双精度),再将其从右... -
整数进制转换——输入十进制整数和欲转换的进制数r,将十进制数转换为r进制数的Python程序
2020-11-22 10:45:28十进制浮点数转化为二进制的Python代码 十进制整数转化为r进制数 程序功能为:输入十进制整数和欲转换的进制数r,将十进制转换为r进制。 编程思想为:调用函数DToR,逐位求模。若该位为大于9的数,则以字母代表... -
c科学计数法转化成浮点数_IEEE 754 与浮点数的二进制表示
2021-01-12 09:06:11IEEE 754 与浮点数的二进制表示ponder.work本文同步发布个人博客在计算机科学中,浮点(英语:floating point,缩写为FP)是一种对于实数的近似值数值表现法, 类似于十进制的科学计数法. 科学记数法在科学记数法中... -
浮点数的二进制表示分析
2013-03-04 22:15:14因为要参加软考了(当然也只有考试有这种魅力),我得了概浮点数转化为二进制表示这个最难的知识点(个人认为最难)。俺结合大量的从网上收集而来的资料现整理如下,希望对此知识点感兴趣的pfan有所帮助。 基础... -
浮点数的二进制表示方法
2014-07-11 09:56:29因为要参加软考了(当然也只有考试有这种魅力),我得了概浮点数转化为二进制表示这个最难的知识点(个人认为最难)。俺结合大量的从网上收集而来的资料现整理如下,希望对此知识点感兴趣的pfan有所帮助。 基础... -
浮点数转换成二进制
2011-04-19 07:47:00因为要参加软考了(当然也只有考试有这种魅力),我得了概浮点数转化为二进制表示这个最难的知识点(个人认为最难)。俺结合大量的从网上收集而来的资料现整理如下,希望对此知识点感兴趣的pfan有所帮助。 基础知识... -
C语言把浮点数转换为二进制数的方法和示例
2020-04-25 16:41:53浮点数据转换为二进制的方法是: 1)把浮点数拆分成两部分,小数点前面的整数和小数点后面的小数。 2)分别把整数和小数部分转换为二进制,保存在字符串中。 3)输出转换后和二进制字符串。 1、整数部分转二进制字符...