本文目录一览:
- 1、C语言中的float存储问题,请尽量详细解答,谢谢
- 2、在C语言中有一float 型数据怎么 不输出后面的0例如:12.100只输出12.1 14.1500只输出14.15
- 3、C语言中0是float还是int类型
C语言中的float存储问题,请尽量详细解答,谢谢
float存储方式是由ieee来规定的
存储分为三个部分:
符号位(sign)
:
0代表正,1代表为负
---------1位
指数位(exponent):用于存储科学计数法中的指数数据,并且采用移位存储
--------8位
尾数部分(mantissa):尾数部分
----------23位
ieee规定:
指数偏移值是指浮点数表示法中的指数域的编码值为指数的实际值加上某个固定的值,该固定值为
2e-1
-
1,其中的e为存储指数的位元的长度。
以单精度浮点数为例,它的指数域是8个位元,固定偏移值是2^(8-1)
-
1
=
128−1
=
127.
单精度浮点数的指数部分实际取值是从128到-127。例如指数实际值为1710,在单精度浮点数中的指数域编码值为144,
即144
=
17
+
127.
科学计数法的表示为1.xxx*(2^n),尾数部分就可以表示为xxx,第一位都是1,干嘛还要表示呀?可以将小数点前面的1省略,所以23bit的尾数部分,可以表示的精度却变成了24bit。而十进制里面每一位是用二进制的4位来表示的,所以24bit的精确度就是24/4
=
6
:)
一个规格化的单精度浮点数x的真值为x=((-1)^s)*(1.m)*(2^(e-127))
对于计算机中32bit表示的浮点数,表示的术的绝对值的范围约为(1e-38)~(1e+38),即2^(-127)~1.11111111b*(2^128),浮点数的绝对值再怎么小,也不可能小过2^(-127),浮点数中不存在绝对0,所以我们只能取近似值
对于第四问来说,因为在进行浮点数操作时会有四舍五入的操作
举个例子
如果a+b最后大于5则最后一位+1,然后再加上c最后结果还大于5再+1
这样一共加了两次
但是a+c可能最后小于5,然后再加上b才大于5
这样一共只加了一次
所以。。。
在C语言中有一float 型数据怎么 不输出后面的0例如:12.100只输出12.1 14.1500只输出14.15
char str[32];
float x;
int i;
x = 14.15010; // 例子
sprintf(str,"%f",x);
for (i=strlen(str)-1; i =0; i--){
if (str[i] !='0') {str[i+1]='\0'; break;}
}
printf("%s",str);
C语言中0是float还是int类型
int和float首先明白其本质是数据类型,何为数据类型,其实其名字就告诉我们,像我们学习时喜欢把整数和小数分开一样,这里的int是整数类型,float是浮点数(小数类型)。这不就是俩种数据类型
那么为什么要区分那,主要原因是计算机在存储数据时分配的内存空间是不同的,你定义了int(整型)它就分配对应整型的大小,比如4个内存单元。
那么我为什么要说比如是4个内存单元那,原因是不同的cpu分配内存是不一样的,32位cpu分配的int就是4个字节,至于为什么如此,这是硬件设计时决定的(32位/8=4字节)(不理解跳过)
综上所述,你应该明白你定义的每一个变量都会分配一块内存,并且分配内存的大小是取决于你的数据类型的。