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

  • 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. datatables之翻页、搜索、排序事件

    $(document).ready(function() { $('#table').on('order.dt', function() { console.log('排序'); }).on('sea ...

  2. 在CentOS上配置redis服务

    #!/bin/sh # # redis Startup script for Redis Server # # chkconfig: - 80 12 # description: Redis is a ...

  3. android studio gradle统一管理版本

    创建config.gradle ext { android = [ compileSdkVersion : 26, buildToolsVersion : "26.0.2", mi ...

  4. [iuud8]如何在mac下配置cocos2dx环境

    安装后xcode之后,下载cocos2dx压缩包,解压 通过中断cd到cocos2dx目录内 输入下行命令 sudo ./install-templates-xcode.sh 运行成功后打开xcode ...

  5. 厌烦了写findViewById 试试ButterKnife吧

    先上官网 http://jakewharton.github.io/butterknife/  和 https://github.com/JakeWharton/butterknife 配置开发环境 ...

  6. System.Data.SqlClient.SqlException: 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值

    System.Data.SqlClient.SqlException: 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值.解决办法是: 而这位大哥提出的解决办法 ...

  7. ring0 进程隐藏实现

    最近在学习内核编程,记录一下最近的学习笔记. 原理:将当前进程从eprocess结构的链表中删除 无法被! process 0 0 看见 #include "HideProcess.h&qu ...

  8. ARM实验2 —— 蜂鸣器实验

    PWM蜂鸣器实验: 实验内容: 编写PWM模块程序,通过PWM控制FS_4412平台上的蜂鸣器. 实验目的: 熟悉开发环境. 掌握exynos4412处理器的PWM功能. 实验平台: FS_4412开 ...

  9. 22 Swap Nodes in Pairs

    Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...

  10. Raknet—视频会议系统最佳的数据传输引擎

    RakNet是一个跨平台的C++和C#的游戏引擎,它主要是为高效的数据传输而设计,使用者可以通过它进行游戏和其他的程序的开发.RakNet虽然是一个游戏引擎,但同样也是一个非常好的视频会议系统传输引擎 ...