C语言进阶——浮点数的秘密03
浮点数在内存中的储存方式为:符号位 指数位 尾数
- 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的更多相关文章
- C语言-浮点数的秘密
一.浮点数的秘密 1.内存中的浮点数 浮点数在内存中的存储方式为:符号位.指数.尾数 十进制浮点数的内存表示: 实例分析: #include <stdio.h> //打印十进制的内存表示 ...
- 《C语言进阶剖析》课程目录
<C语言进阶剖析>学习笔记 本文总结自狄泰软件学院唐佐林老师的<C语言 ...
- 【R笔记】R语言进阶之4:数据整形(reshape)
R语言进阶之4:数据整形(reshape) 2013-05-31 10:15 xxx 网易博客 字号:T | T 从不同途径得到的数据的组织方式是多种多样的,很多数据都要经过整理才能进行有效的分析,数 ...
- C语言I—2019秋作业03
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 C语言I-2019秋作业03 我在这个课程的目标是 掌握if-else语句,运算关系 这个作业在那个具体方面帮助我实现目标 row 2 c ...
- 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01
书接上回,我们已经安装好Iris框架,并且构建好了Iris项目,同时配置了fresh自动监控项目的实时编译,万事俱备,只欠东风,彩虹女神蓄势待发.现在我们来看看Iris的基础功能,如何编写项目入口文件 ...
- R语言进阶
一.初学入门:<R in Action><The Art of_R Programming>入门者可首选两本,前者从统计角度入手,分高中低三部分由浅入深的讲解了如何用R来实现统 ...
- 苹果新的编程语言 Swift 语言进阶(三)--基本运算和扩展运算
一 基本操作运算 1. 赋值操作 在Swift 中,能够使用赋值操作为一个常量或一个变量赋值,也能够使用多元组一次为多个常量或变量赋值. Swift 的赋值操作与其他语言最大的不同是赋值操作除了可以为 ...
- 苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类
Swift语言中,具有类特征的类型包括三种,即枚举类型.结构类型(包括基本类型,基本类型实际都是结构类型的特例).类.其中枚举类型.结构类型是属于值类型,类属于引用类型.三种类型都可以添加属性.方法. ...
- 苹果新的编程语言 Swift 语言进阶(二)--基本数据类型
一 . 常量和变量 Swift语言 对常量和变量的声明进行了明确的区分 Swift语言的常量类型比C 语言的constants类型更加强大,语义更加明确. 常量和变量的区别是常量在设置或初始化后 ...
随机推荐
- 处理http请求时,如何处理url的参数
1.@PathVariable 获取url中的数据 这种写法显得简洁 也可以把参数写在前面 @RequestParam 获取请求参数的值 适合传统的get提交参数的获取 给参数id设置一个默认值 不传 ...
- (五)JavaScript之[类型转换]
/** * 类型转换 * * JavaScript 数据类型 * 1.不同的数据类型 * string * number * object * boolean * function * * 2.对象类 ...
- Android Studio 创建虚拟机失败 Failed to load 解决办法
Name: Nexus_S_API_21 CPU/ABI: ARM (armeabi) Path: H:\Users\Pavkoo\.android\avd\Nexus_S_API_21.avd Er ...
- python绘图 matplotlib教程
mark一个很好的python绘图教程 https://liam0205.me/2014/09/11/matplotlib-tutorial-zh-cn/
- May 1 2017 Week 18 Monday
The very essence of romance is uncertainty. 浪漫的精髓就在于它充满了种种可能. Yesterday my girl friend told me that ...
- Selenium入门15 截图
截图方法: 1 保存截图 get_screenshot_as_file('保存路径\\文件名.png') #有一个\是转义符 2 保存截图 save_screenshot('保存路径\\文件名 ...
- IOS 获取.plist文件的数据
@property (nonatomic,strong) NSArray *apps; //获取.plist数据 /**获取plist文件的数组数据*/ -(NSArray *)apps{ if( ...
- next_permutation暴力搜索,POJ(3187)
题目链接:http://poj.org/problem?id=3187 解题报告: #include <stdio.h> #include <iostream> #includ ...
- 简单使用mybatis(idea中使用)
首先创建一个maven项目 第一步:在pom.xml中添加依赖 <dependencies> <!--mybatis--> <dependency> <gro ...
- 前端JavaScript之DOM使用案例
1.弹出框点击关闭 (这个例子关键自己创建标签以及属性,不是太好想啊,而且作用相对来数也不是太大) <!DOCTYPE html> <html> <head> &l ...