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类型更加强大,语义更加明确. 常量和变量的区别是常量在设置或初始化后 ...
随机推荐
- Asp.Net中ObjectDataSource控件传参绑定数据
最近在实习,在上头交付的任务中,由于需要使用Asp.Net的ListView控件,因此必然得就使用了ObjectDataSource控件,由于在使用过程中,需要网页中的参数发送到后台后,运行该参数进行 ...
- iDempiere 使用指南 插件安装过程
Created by 蓝色布鲁斯,QQ32876341,blog http://www.cnblogs.com/zzyan/ iDempiere官方中文wiki主页 http://wiki.idemp ...
- 栅格那点儿事(四D)
统计值与空值 在上一篇的内容里反复提到了一个统计值.那这个统计值是怎么来的,具体是干嘛用的呢? 统计值主要就是用于栅格数据的显示和重分类,顾名思义就是一个波段中所有像元值的一个统计信息,最大值,最小值 ...
- Android 监听APP进入后台或切换到前台方案对比
在我们开发的过程中,经常会遇到需要我们判断app进入后台,或者切换到前台的情况.比如我们想判断app切换到前台时,显示一个解锁界面,要求用户输入解锁密码才能继续进行操作:我们想判断app切换到后台,记 ...
- ReactNative-JS 调用原生方法实例代码(转载)
第一步首先创建ReactNative 模块类继承ReactContextBaseJavaModule package com.mixture; import android.content.Con ...
- 洛谷 P2814 家谱
题目背景 现代的人对于本家族血统越来越感兴趣. 题目描述 给出充足的父子关系,请你编写程序找到某个人的最早的祖先. 输入输出格式 输入格式: 输入由多行组成,首先是一系列有关父子关系的描述,其中每一组 ...
- UESTC 757 棋盘
虽然是水题,但是还是很interesting的.(大概就是我最晚出这个题了... 博弈感觉就是靠yy能力啊.这题是对称性. 最后的必败态是白色格子对称的,一旦对称形成,对手怎么选,跟随就好,对手无法摆 ...
- DP找最优配置,(POJ1018)
题目链接:http://poj.org/problem?id=1018 这个DP,我的头都快晕了. dp[i][j]表示取到第i个设备,宽带为j时的最小价格. 状态转移方程: dp[i][k]=min ...
- 矩阵连乘的相乘次数(ZOJ1094)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=94 解题报告: 1.数据结构: ///矩阵行数和列数 struct N ...
- centos7 kvm安装使用
kvm简介 KVM 全称是 Kernel-Based Virtual Machine.也就是说 KVM 是基于 Linux 内核实现的. KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU ...