2022-12-16 23:34来源:m.sf1369.com作者:宇宇
这是浮点数,要用以e为底数的对数,近似表达
1)转换成二进制数,再规格化:-0.1953125D=-0.0011001B=-0.11001*2^(-2)
注:规格化只需将二进制数写成尾数为0.1*****(即0.1开头)此种格式即可。
(2)阶码为-2,用3位二进制表示为-010B(注:前面补0),求出补码为1110。方法略,不懂自己看书。
(3)7位尾数为-0.1100100(注:后面补0),求出补码为10011100。
(4)规格化浮点数形式为:阶码+尾数,即为1110 1001 1100,转换为十拉进制为E9C。
做题要归纳方法,希望对你有用。
>10 八进制和十六进制数既可以表示整数,也可以表示浮点数。
如果八进制和十六进制数不带小数点时,转换成十进制数时,就为整数。
如果八进制和十六进制数带有小数点,根据相应的转换规则,小数点左边的转换为整数,右边的转为小数。这时的八进制和十六进制就为浮点数。
printf中各种符号分别代表的输出类型如下:
%a(%A):浮点数、十六进制数字和p-(P-)记数法(C99)
%c:字符
%d:有符号十进制整数
%f:浮点数(包括float和doulbe)
%e(%E):浮点数指数输出[e-(E-)记数法]
%g(%G):浮点数不显无意义的零"0"
%i:有符号十进制整数(与%d相同)
%u:无符号十进制整数
%o:八进制整数 e.g. 0123
%x(%X):十六进制整数0f(0F) e.g. 0x1234
%p:指针
%s:字符串
%%:"%"
扩展语句:
C语言中printf语句的简介:
printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。
函数原型:int printf ( const char * format, ... );
返回值:
正确返回输出的字符总数,错误返回负值,与此同时,输入输出流错误标志将被置值,可由指示器ferror来检查输入输出流的错误标志。
调用格式:
printf()函数的调用格式为:printf("格式化字符串",输出表列)。
格式化字符串包含三种对象,分别为:
(1)字符串常量;
(2)格式控制字符串;
(3)转义字符。
字符串常量原样输出,在显示中起提示作用。输出表列中给出了各个输出项,要求格式控制字符串和各输出项在数量和类型上应该一一对应。其中格式控制字符串是以%开头的字符串,在%后面跟有各种格式控制符,以说明输出数据的类型、宽度、精度等。
首先 浮点数2.5写成二进制应该为10.1(其中整数部分10b=2d, 小数部分0.1*2=1所以0.1b为0.5d)。
然后要把10.1规格化(写成1.xxxx * 2^n的形式,有点像科学计数法)得到1.01*2^1(其中2^1中的1为阶码, 1.01为有效数字)
加上2.5为正数,这就得到三部分信息:
1. 有效数字为1.01.
2. 阶码为1.
3. 符点数为正数
而c/c++的float类型结构为:
1. 最低的23位记录规格化小数中的有效数字(但是不保存最前面的1)
2. 之后的8位记录阶码(上面的阶码转换到这里要+127)
3. 最高的一位表示正负数(0为正数,1为负数)
最终得到的二进制数为:
高位 低位
0 10000000 01000000000000000000000
整理得:
0100 0000 0010 0000 0000 0000 0000 0000
转到16进制得:
40200000
注意:0 无穷大 在符点数里比较特殊另外处理(我也不太明白-_-!)
在监视用的变量表中,将十六进制双字16#42480000的显示格式改为FLOATING_POINT(浮点数),就可以看到对应的浮点数为50.0。
浮点数又称为实数(REAL),用32位二进制数表示。浮点数表示为1.m 乘以2的E次方。其中尾数1.m和指数E均为二进制数,E可能是正数,也可能是负数。 ANSI/IEEE 754-1985标准格式的32位实数的格式为1.m乘以2的e次方,式中指数e = E +127为8位正整数。
尾数的小数部分m为第0~22位,第23~30位为指数e,最高为符号位。
在西门子的软件中,一般并不使用二进制格式或十六进制格式的浮点数,而是用十进制小数来输入或显示浮点数,例如在STEP 7中,50为16位整数,而50.0为浮点数
浮点数存储普遍使用IEEE标准.
首先要看是单精度float还是双精度double
此处假设为单精度,双精度类似
对float,共32位,从高位到低位分别为1位的符号位,8位阶码,23位尾数
246.15为正数,符号位为0.
246.15包含整数部分 246;小数部分0.15;
整数部分直接转换为2进制形式:11110110b;
小数部分具体转换比较麻烦,我给你说下我的算法:
0.15
1:2*0.15 = 0.3 ,0.3<1 第一位为0
2:2*0.3 = 0.6 ,0.6<1 第二位为0
3:2*0.6 = 1.2 ,1.2>1 第三位为1,此时要把1.2 =1.2 - 1
4:2*0.2 = 0.4 ,第四位为0,原理同上
5:2*0.4 = 0.8 ,第五位为0
6:2*0.8 = 1.6 ,第六位为1
7:2*0.6 = 1.2 ,第七位为1
8:2*0.2 = 0.4 ,第八位为0,后面的就是循环了,看第5-8步
加上整数位算够24位 ,不够24位用0补够,此处小数位算16位, 算出来的结果应该为0010 0110 0110 0110b;
此时便可转换246.15为二进制形式11110110.0010 0110 0110 0110
也可表示成1.111 0110 0010 0110 0110 0110b * 2^7;
注意指数为7,解码为8位2进制数,此数即可表示正也可表示负,约定把指数+(2^7-1)作为阶码
就是 7 +(2^7-1) = 134 = 10000110b作为阶码
科学计数法第一位都为1,在IEEE标准中可以省略
此时就得出了246.15的IEEE形式:
符号位 0b
阶码 10000110b
尾数 111 0110 0010 0110 0110 0110b
组合起来就是 0 10000110 111 0110 0010 0110 0110 0110b
转为16进制为 0x43762666;
当然一般情况下是不需要进行手动的转换的
因为有二进制,八进制和16进制,非16进制浮点数的意思就是你在别的里面选一个
1234=4*16的平方+ 13*16的一次方 + 2*16的零次方 = 4d2,其中13在十六进制中用d表示。
29.86 = 0.2986 * 10^2,这里尾数为0.2986,阶码为2.那二进制直接转化成小数乘2的N次方就OK。
本计算器用于将(32位)16进制IEEE-754标准浮点数转为10进制浮点数,输入32位(单精度)16进制IEEE-754标准浮点数,点击“计算”输出10进制浮点数。
32位等于4个字节(8个字符),本软件中数据序列,用于选择4个字节的输入顺序。
1)左高字节为一般正常序列,例如输入:40200000,转换结果为2.5。
2)右高字节用于直接复制MODBUS RTU通讯或其他反序输出通讯格式中的数据包中相应的数据段,粘贴于输入框,输入数据可以带空格,本软件将自动滤掉空格。例如:选择右高字节,输入:00 00 20 40,转换结果为2.5。
例如:输入(32位)16进制浮点数:40200000,转换成10进制结果为:2.5
(32位)16进制IEEE-754标准浮点数转化为10进制浮点数计算器。