c语言 浮点型数据怎么存放,C语言学习之浮点型数据存储
C语言学习之浮点型数据
浮点数
浮点型数据分为单精度浮点型(float)和双精度浮点型(double).
单精度(float)
单精度浮点值
取值范围:1.2E-38 到 3.4E+38
精度:6 位小数
单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数。
上述图片是计算机将float型数据存储的形式描述。
双精度浮点值
取值范围:2.3E-308 到 1.7E+308
精度: 15 位小数
双精度是1位符号,11位指数,52位小数。
上述图片是计算机将float型数据存储的形式描述。
具体的存储原理以单精度浮点数为例
二进制的存储形式,
首位是符号位,0代表正数,1代表负数。
23~30位为指数位,
0~22位为小数位
下面关于指数位进行详细介绍
指数位也称为阶码。
阶码:在机器中表示一个浮点数时需要给出指数,这个指数用整数形式表示,这个整数叫做阶码。
阶码位数越多,可表示的数的范围越大;尾数越多,所表示的数的精度越高。
以3.375为例,3的二进制为011,0.375的二进制为011,那么3.375的二进制可以写成11.011,用科学计数法的形式写,就是1.1011x10,即 指数位是1;同理 120.25的二进制形式为1111000.01,用科学计数法的形式写就是1.11100001x10^(+6),即指数位是+6,在指数位有+6,那么就有-6,又因为指数位一个有8位,范围是-127~128,
为了消除负数对指数的影响,就增加了一个偏移量的概念,在float中偏移量为127,这样就是所有的数均大于等于0了,那么偏移后,指数的范围是0~255.
例如 1+127=128,其转化为二进制形式为10000000
6+127=133,其转化为二进制形式为10000101
那么最终上述的两个例子在计算机中的存储结果为
1 10000000 10110000000000000000000 -----3.375
1 10000101 11100001000000000000000 ------120.25
细心观察的话就发现,科学技术法表示的整数位上的1 并未写入上述的存储结果之中,这是因为1肯定始终确定的,那么就省略了,这样做相当于省了1bite空间表示,可以认为是提高了精确度。
下面是将十进制数转化为二进制数的程序
//将十进制小数分别求其整数的二进制、小数的二进制,并分别输出
#include
#include
int fun(int n)
{
if (n){
fun(n / 2);
printf("%d", n & 1);
}
if (n==0)
printf("%d", n & 1);
}
int fun1(float f)
{
int flat = 1;
int number = 0;
while (flat)
{
int num;//用来存储f的整数部分
f = f * 2;
num = (int)f;
f = f - num;
printf("%d", num);
number++;
if (f == 0)
flat = 0;
}
}
int main()
{
float ff = 120.25;//以一个实际小数为例
int Num;
if (ff > 1)
{
Num = (int)ff;//求小数的整数部分
ff = ff - Num;//求小数的小数部分
}
else
{
Num = 0;
}
fun(Num);
printf("\n");
fun1(ff);
printf("\n");
}
将十进制小数部分转化为二进制的基本原理的C语言核心代码
int fun1(float f)
{
int flat = 1;
int number = 0;
while (flat)
{
int num;//用来存储f的整数部分
f = f * 2;
num = (int)f;
f = f - num;
printf("%d", num);
number++;
if (f == 0)
flat = 0;
}
}
关于double型数据的存储过程本质上类似,但是由于其存储大小为8个字节,因此其指数位的偏移量是1023,除此之外,没什么不同,当然了,0也比较多。
除了float double型数据,还有long double 型数据,其存储大小为16字节,取值范围为3.4E-4932 到 1.1E+4932,精度为19 位小数。
本篇博客参考了一下一篇文档
C语言浮点数存储方式(其中含有较多的图片,更利于理解吧)
c语言 浮点型数据怎么存放,C语言学习之浮点型数据存储相关推荐
- c语言整型如何存放,C语言的数据类型→整型数据
整型数据 一.整型常量的表示方法:"整型常量"即"整常数". 在C语言中,整常数有三种形式表示: 十进制整数: 如:123.-456.4. 八进制整数,以0开头 ...
- c语言文件可用代码存放,C语言 文件(示例代码)
小白一个,看到有错误,希望指出,万分感谢 /**************************************************************** C语言文件概述: 一般文件 ...
- c语言指针的地址存放,c语言 - *指针 和 地址
最近在研究oc的底层,全是c/c++的代码,虽然以前学过也写过,其实不怎么用都忘得差不多了. 首先我们来了解一下 * 和 &这两个符号 通俗点儿理解其实&地址就是就是一个存放地址的变量 ...
- c语言一维数组如何存放,C语言一维数组教案
<C语言一维数组教案>由会员分享,可在线阅读,更多相关<C语言一维数组教案(6页珍藏版)>请在人人文库网上搜索. 1.学 科:计算机科学与技术课 程:C语言程序设计课 题:一维 ...
- python有什么库可以 从fig文件中读取数据_Python之matplotlib库学习:实现数据可视化...
1. 安装和文档 pip install matplotlib 为了方便显示图像,还使用了ipython qtconsole方便显示.具体怎么弄网上搜一下就很多教程了. pyplot模块是提供操作ma ...
- C语言第一个字节地址,C语言字节对齐详解
#pragma pack () /*取消指定对齐,恢复缺省对齐*/本文引用地址:http://www.eepw.com.cn/article/148849.htm sizeof(struct D)值为 ...
- [C++基础]017_数据的存放
学习写程序,就不能不对程序的数据存放有一定的了解.可能你常常听说栈啊.堆啊什么的,下面咱们看看数据的存放有哪几个位置. ①.栈区 存储[函数参数]以及[局部变量],由编译器自动分配和释放 ②.堆区 存 ...
- 量化学习:大数据时代的学习方式
摘 要:未来人工智能.大数据.学习分析等技术被广泛应用于教育教学中,量化学习将成为新的研究热点.本研究首先对量化学习的内涵.特征.工具和方法进行概述,然后阐述了量化学习的价值意义和应用案例,进而分析了 ...
- 大数据在高校的应用场景_大数据在高校教育信息化的应用
[摘要]随着我国经济的发展,科学技术的迅猛提高,信息技术已经逐渐融入到社会的每一个角落,21世纪开始步入信息化时代.随着信息技术的渗透,作为社会生活的重要阵地,高校自然也不会置身事外,信息技术在高校教 ...
最新文章
- G面经prepare: Pattern Match
- PyQt 5布局管理
- 期初付年金(annuity-due)
- c语言兔子繁殖问题分析和递归方程,经典的兔子生兔子问题(C#递归解法)
- gridview排序加箭头(二)
- python 2.7中urllib 2 与python 3.5中 urllib的区别。
- 一、RequireHttps
- 图像语义分割(2)-DeepLabV1: 使用深度卷积网络和全连接条件随机场进行图像语义分割
- 网页浏览器主要通过ftp协议同网页服务器,FTP协议的工具、网页浏览器和命令
- 基于umijs+lerna+qiankun的微前端实现
- 第十二章 项目采购管理第六版
- 第一次接触APK【破解纪实】
- 监控系统的基本架构(Metric monitoring)
- nyistOJ-See LCS again(二分)
- widget是什么意思?
- android实现b站弹幕,Android弹幕实现:基于B站弹幕开源系统(2)
- 数的进制转换(任意两个进制之间的转换)
- CC26x2R1笔记(11)蓝牙丢包问题(GATT_WriteNoRsp发送返回0x16:blePending)
- 电销越来越难做,外呼系统怎么帮助涨业绩
- 【STM32F103】PB3和PB4不能按照设置输出相应的电平问题