浮点数在内存中的储存方式为:符号位 指数位 尾数

  • float和double类型的数据在计算机内部的表实方法是一样的,但是由于所占的存贮空间的不同,其分别能表示的数值范围和精度不同。
类型 f符号位 指数 尾数
float 1位(第31位) 8位(第23位--30位) 23位(第0--22位)
double 1位(第63位) 11位(第52位--62位) 52位(第0--51位)

浮点数的转换:

  • 将浮点数转化位二进制
  • 用科学计数法表实二进制浮点数
  • 计算指数偏移后的值

rember:计算指数的时候需要加上一个偏移量,但是偏移量和类型是有关系的:

  对于指数6:

  • float:127+6=133
  • double:1023+6=1029

实数8.25在内存中的float表实:8.25的二进制表实:1000.01-》1.00001*(2^3)

  • 符号位:0
  • 指数:127+3=130-》10000010
  • 小数:00001

内存中8.25的float表示:

  • 0 10000010 00001000000000000000000 -》0x41040000

代码示例1:

#include <stdio.h>

int main()
{
float f = 8.25; unsigned int* p = (unsigned int*)&f; printf("0x%08X\n", *p); return ;
}

用float存贮8.25,然后用一个unsigned int类型的指针指向它,最后输出这个指针类容的16进制

有趣的问题:int类型的存贮范围是 -2^31~~2^31-1,float的存贮范围是-3.4*10^38~~3.4*10^38,为什莫在内存中都是4个字节,但是存贮的范围差距这莫大?

  • float能表实的具体数字的个数与int是相同的
  • float可表示的数字不是连续的,存在间隙
  • float只是一种近似的表实法,不能作为精确数使用
  • 由于float内存表实相对复杂。float的运算速度比int慢一些
  • 注意:double与float具有相同的内存表示法,因此double也是不精确的。由于double占用的内存较多,所能表示的精度比float要高

代码示例2:

#include <stdio.h>

int main()
{ float f = 3.1415f;
float fl = ; printf("%0.10f\n", f);
printf("%0.10f\n", fl); return ;
}

为什莫输出结果会折磨奇怪呢,就是因为浮点数不是精确的,它是不连续的存在间隙

小结:

  • 浮点数与整数类型的内存表示法不同
  • 浮点数的内存表示更加复杂
  • 浮点类型可表示的范围更大
  • 浮点数是一种不精确的类型
  • 浮点类型的运算速度更慢

C语言进阶——浮点数的秘密03的更多相关文章

  1. C语言-浮点数的秘密

    一.浮点数的秘密 1.内存中的浮点数 浮点数在内存中的存储方式为:符号位.指数.尾数 十进制浮点数的内存表示: 实例分析: #include <stdio.h> //打印十进制的内存表示 ...

  2. 《C语言进阶剖析》课程目录

    <C语言进阶剖析>学习笔记                                                         本文总结自狄泰软件学院唐佐林老师的<C语言 ...

  3. 【R笔记】R语言进阶之4:数据整形(reshape)

    R语言进阶之4:数据整形(reshape) 2013-05-31 10:15 xxx 网易博客 字号:T | T 从不同途径得到的数据的组织方式是多种多样的,很多数据都要经过整理才能进行有效的分析,数 ...

  4. C语言I—2019秋作业03

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 C语言I-2019秋作业03 我在这个课程的目标是 掌握if-else语句,运算关系 这个作业在那个具体方面帮助我实现目标 row 2 c ...

  5. 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01

    书接上回,我们已经安装好Iris框架,并且构建好了Iris项目,同时配置了fresh自动监控项目的实时编译,万事俱备,只欠东风,彩虹女神蓄势待发.现在我们来看看Iris的基础功能,如何编写项目入口文件 ...

  6. R语言进阶

    一.初学入门:<R in Action><The Art of_R Programming>入门者可首选两本,前者从统计角度入手,分高中低三部分由浅入深的讲解了如何用R来实现统 ...

  7. 苹果新的编程语言 Swift 语言进阶(三)--基本运算和扩展运算

    一 基本操作运算 1. 赋值操作 在Swift 中,能够使用赋值操作为一个常量或一个变量赋值,也能够使用多元组一次为多个常量或变量赋值. Swift 的赋值操作与其他语言最大的不同是赋值操作除了可以为 ...

  8. 苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类

    Swift语言中,具有类特征的类型包括三种,即枚举类型.结构类型(包括基本类型,基本类型实际都是结构类型的特例).类.其中枚举类型.结构类型是属于值类型,类属于引用类型.三种类型都可以添加属性.方法. ...

  9. 苹果新的编程语言 Swift 语言进阶(二)--基本数据类型

    一  .   常量和变量 Swift语言 对常量和变量的声明进行了明确的区分 Swift语言的常量类型比C 语言的constants类型更加强大,语义更加明确. 常量和变量的区别是常量在设置或初始化后 ...

随机推荐

  1. Java之美[从菜鸟到高手演变]之智力题【史上最全】 (转)

    原文地址:http://blog.csdn.net/zhangerqing/article/details/8138296 PS:在一次偶然的机会中,发现了这篇文章.希望大家能开动脑经. 智力题,每个 ...

  2. 封装vue-resource http请求

    import Vue from "vue" import vueResource from "vue-resource" Vue.use(vueResource ...

  3. 【菜鸟学Linux】Cron Job定期删除Log(日志)文件

    以前一直做Windows开发,近期的项目中要求使用Linux.作为小菜鸟一枚,赶紧买了一本经典书<鸟哥的Linux私房菜>学习.最近刚好有一个小任务 - 由于产品产生的Log很多,而且增长 ...

  4. Linux命令之查看服务进程(ps aux、ps -aux、ps -ef)的运用

    执行ps命令即可列出的是当前服务器进程的快照(时间点),如果想要实时动态的显示进程信息,就可以使用top命令. linux上进程有5种状态:  1. 运行(正在运行或在运行队列中等待)  2. 中断( ...

  5. python JSON性能测试与simplejson对比

    简单测试了一下,如果用JSON,也就是python2.6以上自带的json处理库,效率还算可以: 1K的数据,2.9GHz的CPU,单核下每秒能dump:36898次.大约是pyamf的5倍.但数据量 ...

  6. [原创][Windows] Win7安装visual c++ 2015 redistributable x64失败

    在win7中安装visual c++ 2015 redistributable x64 时会卡住,原因是visual c++ 2015 redistributable x64 需要KB2999226, ...

  7. node实现爬虫

    node实现获取到豆瓣电影排行榜页面. 准备工作: 1.新建一个文件夹node 在当前文件夹中打开cmd 下载 npm install 初始化 npm init(注意一下:如果你的npm init没有 ...

  8. UOJ #207. 共价大爷游长沙

    #207. 共价大爷游长沙 链接:http://uoj.ac/problem/207 题意:给一棵树,要求支持加边.删边.询问一条边是否被所有路径覆盖.同时路径端点集合有加入与删除操作. 想法: 考虑 ...

  9. POJ-3041 Asteroids---二分图&最小覆盖点

    题目链接: https://vjudge.net/problem/POJ-3041 题目大意: 给一个N*N的矩阵,有些格子有障碍,要求我们消除这些障碍,问每次消除一行或一列的障碍, 最少要几次. 解 ...

  10. DP找最优配置,(POJ1018)

    题目链接:http://poj.org/problem?id=1018 这个DP,我的头都快晕了. dp[i][j]表示取到第i个设备,宽带为j时的最小价格. 状态转移方程: dp[i][k]=min ...