C语言中单精度数据的存储范围,求高手指点啊

首先我说下啊,我本人是软件工程专业的学生,所用书籍是清华版谭浩强的书籍,就是C语言程序设计第二版,在书中第27叶中,有这么一句话,VISUAL C++编译系统中,一般占用四个字节的单精度数据的数值范围是10的负38次方到十的38次方之间,有效位数是7位数,而双精度的数据其数值范围是十的负308次方到正308次方,有效位数是15到十六位数,我现在的疑惑是,实数如果是单精度四个字节的话,应该有32位2进制,也就是说,去掉第一位符号外,顶多是2的28次方啊,怎么会是10的38次方啊,还有双精度十的308次方,我真的好疑惑啊,望高手指点一下啊,其实,我明白,四个四级,只能存储八个数字,所以有效数字是7位,中间的点号是一位,8个字节16个数字,我疑惑的是为什么四个字节或者8个字节能够存储那么大的数据,求高手指点啊,真的好疑惑啊

单精度存储首先最高位是符号位。
然后有8位的指数位。代表 2^-127 ~ 2^128 (存储时 127代表 2^0 255代表2^128 0为 2^-127)
后面的23位是尾数即小数位。没有整数,在存储时会移好位,使的整数为1,如2 会存成 1*2^1
这样,1.9999*2^128 大约为 6.8*10^38
双精度的指数部分为11位,2^-1023~2^1024 最大能存大约 3.595*10^308
温馨提示:内容为网友见解,仅供参考
无其他回答

C语言中单精度数据的存储范围,求高手指点啊
单精度存储首先最高位是符号位。然后有8位的指数位。代表 2^-127 ~ 2^128 (存储时 127代表 2^0 255代表2^128 0为 2^-127)后面的23位是尾数即小数位。没有整数,在存储时会移好位,使的整数为1,如2 会存成 1*2^1 这样,1.9999*2^128 大约为 6.8*10^38 双精度的指数部分...

双精度和单精度区别
单精度数是指计算机表达实数近似值的一种方式。VB中Single(单精度浮点型)变量存储为IEEE32位(4个字节)浮点数值的形式,它的范围在负数的时候是从-3.402823E38到-1.401298E-45,而在正数的时候是从1.401298E-45到3.402823E38。单精度和双精度数值类型较早出现在C语言中(比较通用的语言里面),...

C语言:双精度与单精度是包含关系吗?那么我能所有的数都用双精度表标吗...
实型是单精度和双精度的统称,实型和整型在内存里的存储形式不一样。长整型在内存中占4个字节,短整型占2个字节,所以,长整型所表示的数值范围比短整型广。对啦!我还是提醒你一句:学c语言不要在意语法,有个大概的了解就行啦,不然学不好的,c语言重要的是算法。我以前也是你这样学c语言,所以...

C语言编程遇到问题,请求高手指点,是统计区间个数的问题
for(i=1;i<c;i++){ for(j=0;j<最大的个数;j++){ if(a[i]>minin&&a[i]<(minin+division)){ 存储链表 } } minin+=division;在链表中存储一个标记符 } 存储 因为不知道 大小 应该用链表

用C语言计算 1-2\/3+3\/5-4\/7+5\/9-6\/11+、、、n\/(2*n-1) 求高手指点
include "stdio.h"include "math.h"\/\/ void main(void){ int n,i;double x=1,y=2,temp,sum=1,fleg=1;printf("Type an integer...\\nn=");scanf("%d",&n);for(i=1;i<n;i++){ temp=x;x=y;y=temp+x;fleg*=-1;sum+=x\/y*fleg;} printf("%g\\n",sum);} ...

C语言代码求高手指点我修改,在学校网站上提交提示Time Limit Exceed...
先用厄拉多塞筛法计算 1 ~ 10000 中所有的质数,保存在一个数组里面。然后用得到的素数数组判断输入的数是否满足D-Prime 的条件。

c语言编程问题,求高手解答(高分)
可以执行,只是以下几个小问题:一、第一行包含的文件不存在,这一行应该删除。二、定义了argc、argv两个变量没有使用,编译会有警告,可以删除他们或者不管,最好改为:int main()三、scanf输入n和k的时候,中间有个逗号分隔,这样输入的时候会麻烦,最好改为:scanf("%d%d",&n,&k);...

求高手指点这个C语言程序的运行过程!
联合体总是输出最大的。long 是8字节。 2个就是16字节了。typedef union {long x[2];int y[4];char z[8];} MYTYPE;这个联合体就是 MYTYPE 用MYTYPE 定义了个them

C语言三个数求最大求高手指点
include<stdio.h> int max(int x,int y){ return x>y?x:y;} int main(){ int a,b,c;scanf("%d%d%d",&a,&b,&c);printf("%d\\n",max(max(a,b),c));return 0;}

C语言题,求高手指点!?
3.答案C 正确 4. 答案D 错误 s=p;是错误的 因为s是 一个整型数指针,而p是字符型指针。指针类型不同的两个变量不能赋值。=== 希望我的回答对你有所帮助,很高兴和你一起学习和讨论C语言编程。

相似回答