c语言中小数在内存中的存储,c语言中小数在内存中的存储
转至:https://blog..net/tqs_1220/article/details/73550899
首先看float和double在内存中是怎么存储的?
float:符号位(1位)+指数位(8位)+尾数位(23位)
范围:-2^-128 ~2^127 (-3.40E-38~3.40E+38)
double:符号位(1位)+指数位(11位)+尾数尾(52位)
范围:-2^-1024~2^1023(-1.79E-308~1.79E+308)
在计算机中整数的存储是大多数人能够轻易理解得,比如在数据宽度为1个字节时,如果整数表示无符号数时就是0--15.如果整数用作有符号数时:0000--01111代表十进制的0--7。而1000--1111表示从(-8)--(-1)。然而计算机存储数据的方式都是一样的,并没有区分有符号和无符号,是我们使用数据的人来确定它到底是有符号还是无符号。而有符号数据一般使用在 数据比较、数据运算等等,其他方面差别并不是很大。
整数十分好理解,但是小数的存储就让人感到困难多了,很多不懂IEEE规则。我们不需要懂它的规则,我们只需要记住存储的方法,这样以后看到小数就能轻易地知道它在内存中是如何存储的了。具体分为下面几步:
1、知道如何将十进制的整数部分和小数部分化成二进制。
整数就是不断除2得到余数,例:8的二进制可进行这样计算:
8/2=4余数为0
4/2=2余数为0
2/2=1余数为0
1/2=0余数为1
整数从下向上看,所以8的二进制数就是1000。
小数对应的就是乘,例0.25的二进制可进行这样计算:
0.25*2=0.5整数部分为0
0.5*2=1.0 整数部分为1
当小数部分为0时结束运算,像有些数据会一直进行这种运算例如0.4永远无法将小数部分化为0,所以就有了精度的概念。
小数从上到下看,所以0.25的二进制数就是01。
2、知道小数的存储是32位数据的,其中位31是符号位;位30--位23表示指数部分;位22--位0表示尾数(下面会介绍)部分。
3、不管数据的正负,先按照它的绝对值将它表示为二进制形式,注意整数和小数部分用小数点分开。例如:8.25可表示的二进制形式为1000.01。
4、将8.25的二进制形式化为科学计数法形式:1.00001*2^3,其中左移指数为正,右移指数为负。
5、开始存数:
符号位 指数部分(8位) 尾数部分(23位)
0 00000000 00000000000000000000000
尾数部分:即化为科学计数法后的小数部分,如1.00001*2^3它的尾数部分就是00001,因为在化为二进制时是从高到低看下来的,所以在尾数部分存数时就是从高到低,8.25的尾数部分就是00001000000000000000000。
指数部分:指数部分的最高位存的是左移还是右移。左移为1,右移为0。同时将指数减一放到指数部分(指数部分最高位除外),1.00001*2^3的指数部分就是10000010。
符号部分:8.25为正数,存的是0。
所以8.25在计算机中的的数据存储就是01000001000001000000000000000000
0100 0001 0000 0100 0000 0000 0000 0000===41040000
下面讲讲不带整数的小数是如何存储数据的。
除开指数部分存储以外,其他步骤完全一样。我们举例说明:0.25
0.25的二进制形式为0.01,它化为科学计数法需要右移两位,即1.0*2^-2。
尾数部分全0。
指数部分最高位为0(右移)。
(-2)-1=-3=FD=11111101,去除最高位,将FD低七位和指数部分最高位合在一起,即0111 1101。
0.25的32位数据即:0011 1110 1000 0000 0000 0000 0000 0000==3E800000
c语言中小数在内存中的存储,c语言中小数在内存中的存储相关推荐
- c语言%f小数位第六位是错的,c语言中输出浮点型数据,如果不指定输出位数,%f输出几位小数?...
%f :以浮点型数据形式输出,浮点型也就是实数.一共保留6位小数,%f表示实数,保留6位小数,输出float类型的值,小数位数不固定,只是有效位数是7位,输出格式也不一定,不同编译器不一样,比如很多编 ...
- c语言静态存储和动态存储,C语言中的静态内存与动态内存
我们知道,内存分为动态内存和静态内存,我们先讲静态内存. 一.静态内存 内存管理---存储模型 存储模型决定了一个变量的内存分配方式和访问特性,在C语言中主要有三个维度来决定:1.存储时期 2.作用域 ...
- 【C语言进阶深度学习记录】三十三 C语言中动态内存分配
如何在程序运行的时候动态给程序分配内存? 文章目录 1 动态内存分配的意义 1.1 C语言中如何动态申请内存空间 1.2 malloc和free的用法 1.3 calloc与realloc 1.31 ...
- C语言中打印结果如何保留两位、三位小数以及整数?
首先我们要保证我们输入是double类型的数据 第二步当然是打印a,我们要知道打印double类型的数据打印时需要使用占位符%f. (在输入数据时用%lf) 那么打印保留两位数,我们应该怎么做呢? % ...
- 【C 语言】结构体 ( 结构体中嵌套二级指针 | 为 结构体内的二级指针成员 分配内存 | 释放 结构体内的二级指针成员 内存 )
文章目录 一.结构体中嵌套二级指针 1.结构体中嵌套二级指针 类型声明 2.为 结构体内的二级指针成员 分配内存 3.释放 结构体内的二级指针成员 内存 二.完整代码示例 一.结构体中嵌套二级指针 1 ...
- 字符串在内存中的存储——C语言进阶
字符串是以ASCII字符NUL结尾的字符序列. ASCII字符NUL表示为\0.字符串通常存储在数组或者从堆上分配的内存中.只是,并不是全部的字符数组都是字符串,字符数组可能没有NUL字符. 字符数组 ...
- java语言中 说明或声明数组时内存大小,说明或声明数组时不分配内存大小,创建数组时分配内存大小。...
试井过程中每一实测的压力.说明产量都不随时间变化的叫(). 或声学制具体规定着() 明数义务教育的主要特点() 组时组<中华人民共和国义务教育法>是哪一年颁布的?() 现代社会的迅速变化, ...
- 在C语言的函数定义中 如果不需要返回结果,在C语言的函数定义中,如果不需要返回结果,就可以省略return语句...
语言义中语句 数定省略保险般来能一几项的职以下说有. 来源统计济数据的主要调查得社会经是获,需要包括如下容(的内应该. 具体是指,结果积反映房空置面商品,而尚未出屋期末报告工可供销的房出租出租已竣是指 ...
- uml+oopc嵌入式c语言开发精讲_嵌入式开发中更接近底层的汇编与C语言
分享本文,介绍下更接近硬件底层的C语言与汇编,解释 CPU 如何执行代码. 高级语言与低级语言 学习编程其实就是学习与计算机交流的语言.因为计算机不理解人类语言,通过编译器把人类写的代码转成二进制代码 ...
- c语言字符串二维数组的动态分配应,C语言中动态分配二维数组复习过程.doc
C语言中动态分配二维数组复习过程.doc C语言中动态分配二维数组在C中动态分配内存的,对于单个变量,字符串,一维数组等,都是很容易的.C中动态分配二维数组的方法,很少有C语言书中描述,我查找了有的C ...
最新文章
- 数据库连接池连接异常com.alibaba.druid.pool.GetConnectionTimeoutException
- 走近人脸检测:从VJ到深度学习(下)
- BeautifulSoup操作xml文件
- 关于java和c语言中,变量重名问题
- 以智能数据架构,挖掘增长金矿
- 服务容错、限流、资源隔离、熔断、监控…3天,撸完了!
- 字符串换行截取_textwrap 文本自动换行与填充
- leetcode1162. 地图分析(bfs)
- SecureCRT 颜色
- web项目移动端在线预览(excel在线预览)
- 基于Java+SpringMvc+vue+element实现博物馆平台系统
- 凭借这份diao炸天的资料,狂刷三遍成功从外包进入了字节跳动!
- 小学美术计算机教案模板,小学美术教案模板五篇
- 数学分析-换底公式证明
- 2022年5月网络教育大学英语B统考题库复习题及考试时间
- 华硕z170-p+英特尔i7-6700k+16GB黑苹果EFI引导文件
- css画钟表_利用css+原生js制作简单的钟表
- AutoCAD按坐标打印图纸
- WordPress主题柒比贰v2.9.8 完美无限制版
- Hilberling电源维修罗芬Rofin激光电源控制器维修HG-101A