C语言中 Float 数据结构的存储计算
1.了解float存储结构
2.float最大值
- void main(int argc, char* argv[])
- {
- float a=-8.25;
- char *p=(char*)&a;
- *p=0xff;
- *(p+1)=0xff;
- *(p+2)=0xff;
- *(p+3)=0x7f;
- printf("\n&a=%x",&a);
- printf("\na=%f",a);
- }
结果并不和我们想的一样,出现了1.#QNAN0,这个我也不知道为什么,知道原因的可以回复!
- #define FLT_DIG 6 /* # of decimal digits of precision */
- #define FLT_EPSILON 1.192092896e-07F /* smallest such that 1.0+FLT_EPSILON != 1.0 */
- #define FLT_GUARD 0
- #define FLT_MANT_DIG 24 /* # of bits in mantissa */
- #define FLT_MAX 3.402823466e+38F /* max value */
- #define FLT_MAX_10_EXP 38 /* max decimal exponent */
- #define FLT_MAX_EXP 128 /* max binary exponent */
- #define FLT_MIN 1.175494351e-38F /* min positive value */
- #define FLT_MIN_10_EXP (-37) /* min decimal exponent */
- #define FLT_MIN_EXP (-125) /* min binary exponent */
- #define FLT_NORMALIZE 0
- #define FLT_RADIX 2 /* exponent radix */
- #define FLT_ROUNDS 1 /* addition rounding: near */
3.测试代码:
- void main(int argc, char* argv[])
- {
- float a=-8.25;
- char *p=(char*)&a;
- *p=0xff;
- *(p+1)=0xff;
- *(p+2)=0x7f;
- *(p+3)=0x7f;
- printf("\n&a=%x",&a);
- printf("\na=%f",a);
- }
a=340282346638528860000000000000000000000.000000
4.float正最小值
- #define FLT_MIN 1.175494351e-38F /* min positive value */
通过了解float类型的结构我们知道如何才能获得正的最小值,要获得正的最小值,我们只要将指数位置成最小及0000 0000 则指数为0-127=-127,然后将尾数位最后一位置1,其它置0
5.测试代码
- void main(int argc, char* argv[])
- {
- float a=-8.25;
- char *p=(char*)&a;
- *p=0x01;
- *(p+1)=0x00;
- *(p+2)=0x00;
- *(p+3)=0x00;
- printf("\n&a=%x",&a);
- printf("\na=%e",a);
- }
我们得到的结果为 1.00000000 00000000 0000 01*2^-127= 5.877472454760670*10^-039,可是结果不是我们预测的!不知道为什么
- void main(int argc, char* argv[])
- {
- float a=-8.25;
- float b=0;
- char *p=(char*)&a;
- *p=0x01;
- *(p+1)=0x00;
- *(p+2)=0x80;
- *(p+3)=0x00;
- printf("\n %d ",sizeof(a));
- printf("\n&a=%x",&a);
- printf("\na=%e",a);
- }
C语言中 Float 数据结构的存储计算的更多相关文章
- C语言中float,double类型,在内存中的结构(存储方式)
C语言中float,double类型,在内存中的结构(存储方式)从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以doubl ...
- C语言中float如何存储?
float 内存如何存储的 类型 存储位数 总位数 偏移值 (offset) 数符(S) 阶码(E) 尾数(M) 短实数(float) 1 8 23 32 127 长实数(double) 1 11 5 ...
- C语言中float如何存储?(转载)
float 内存如何存储的 类型 存储位数 总位数 偏移值(offset) 数符(S) 阶码(E) 尾数(M) 短实数(float) 1 8 23 32 127 长实数(double) 1 11 52 ...
- c语言中float、double、long double在内存中存储方式
存储格式中的二机制转为浮点数: 浮点型变量在计算机内存中占用4个字节(4 Byte),即32-bit,一个浮点数由2部分组成:底数m 和 指数e: 底数部分:使用2进制数来表示此浮点数的实际值: 指 ...
- float double 如何存储计算2 (这个写的也不错)
目前java遵照IEEE制定的浮点数表示法来进行float,double运算.这种结构是一种科学计数法,用符号.指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号. 我 ...
- 笔试题引出float数据的存储方式的深究
笔试题: #include <iostream>#include <stdio.h>#include <string.h>#include <conio.h& ...
- Java语言中:float、double数据类型在内存中是如何存储的
引用参考 https://www.cnblogs.com/chenmingjun/p/8415464.html#4291528 https://blog.csdn.net/yansmile1/arti ...
- Delphi中获取Unix时间戳及注意事项(c语言中time()是按格林威治时间计算的,比北京时间多了8小时)
uses DateUtils;DateTimeToUnix(Now) 可以转换到unix时间,但是注意的是,它得到的时间比c语言中time()得到的时间大了8*60*60这是因为Now是当前时区的时间 ...
- 数据结构:DHUOJ 单链表ADT模板应用算法设计:长整数加法运算(使用单链表存储计算结果)
单链表ADT模板应用算法设计:长整数加法运算(使用单链表存储计算结果) 时间限制: 1S类别: DS:线性表->线性表应用 题目描述: 输入范例: -5345646757684654765867 ...
随机推荐
- COMPILING ACTIONSCRIPT 3.0 WITH SUBLIME TEXT 2
At Clock we typically spend our time developing JavaScript and PHP, however, occasionally Flash pres ...
- Spark 保存文件 自定义分隔符
Spark 保存文件 调整分隔符 废话 找了半天没找到,在某个地方看到了类似的(文中说的是读取的时候指定),试了一下保存,发现也好用,详细如下. 用法 df.write.option("de ...
- Mac下使用su命令提示sorry
Mac下使用su命令提示sorry,解决办法如下: ➜ Downloads su Password: su: Sorry 谷歌之,两个解决方式: sudo su - # 输入开始第一个创建用户的密码 ...
- windows下使用mingw编译出ffplay(简化版)
之前编译FFmpeg直接使用dll.lib,默认的mingw也不会编译出ffplay.exe. 近期由于工作需要,需要验证下修改之后的FFmpeg版本是否正常,需要使用ffplay.exe. 比较暴力 ...
- CISCO、H3C、华为三层交换机端口二三层切换命令对比
很多人都在问H3C是否有像CISCO三层端口切换类似的命令 switchport . 答案是肯定的.有.很多人都不知道. 其实无论是思科还是H3C还是华为他们都有这样的命令.但是在H3C和华为中不经常 ...
- LeetCode: Insertion Sort List 解题报告
Insertion Sort List Sort a linked list using insertion sort. SOLUTION: 使用一个dummynode 创建一个新的链,将旧的节点插入 ...
- [转]JS组件系列——表格组件神器:bootstrap table
原文地址:https://www.cnblogs.com/landeanfen/p/4976838.html 前言:之前一直在忙着各种什么效果,殊不知最基础的Bootstrap Table用法都没有涉 ...
- [转]SpringMVC<from:form>表单标签和<input>表单标签简介
原文地址:https://blog.csdn.net/hp_yangpeng/article/details/51906654 在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标 ...
- spring mvc之启动过程源码分析
简介 这两个星期都在看spring mvc源码,看来看去还是还是很多细节没了解清楚,在这里把看明白的记录下,欢迎在评论中一起讨论. 一.铺垫 spring mvc是基于servlet的,在正式分析之前 ...
- THINKPHP短链接设置方法(路由设置)
//路由设置(短链接设置) 'URL_ROUTER_ON' => true, 'URL_ROUTE_RULES' => array( 'log' => 'Login/index', ...