1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 从零开始的嵌入式生活:c语言中的小数和数据类型转换

从零开始的嵌入式生活:c语言中的小数和数据类型转换

时间:2022-11-09 09:32:01

相关推荐

从零开始的嵌入式生活:c语言中的小数和数据类型转换

一、C语言中的小数

小数分为整数部分和小数部分,它们由点号.分隔,例如0.0、75.0、4.023、0.27、-937.198-0.27等都是合法的小数,这是最常见的小数形式,我们将它称为十进制形式

此外,小数也可以采用指数形式,例如7.25×10^2、0.0368×10^5、100.22×10^-2、-27.36×10^-3等。任何小数都可以用指数形式来表示

C语言同时支持以上两种形式的小数。但是在书写时,C语言中的指数形式和数学中的指数形式有所差异。

C语言中小数的指数形式为:

aEn或aen

a为尾数部分,是一个十进制数;n为指数部分,是一个十进制整数;E或e是固定的字符,用于分割尾数部分和指数部分。整个表达式等价于a×10n。

指数形式的小数举例:

2.1E5=2.1×10^5,其中2.1是尾数,5是指数。3.7E-2=3.7×10^-2,其中3.7是尾数,-2是指数。0.5E7=0.5×10^7,其中0.5是尾数,7是指数。

C语言中常用的小数有两种类型,分别是float或double;float称为单精度浮点型占用4个字节,double称为双精度浮点型占用8个字节

小数的输出

小数也可以使用printf函数输出,包括十进制形式和指数形式,它们对应的格式控制符分别是:

%f以十进制形式输出float类型;%lf以十进制形式输出double类型;%e以指数形式输出float类型,输出结果中的e小写;%E以指数形式输出float类型,输出结果中的E大写;%le以指数形式输出double类型,输出结果中的e小写;%lE以指数形式输出double类型,输出结果中的E大写;

%g会对比小数的十进制形式和指数形式,以最短的方式来输出

%f和%lf默认保留六位小数,不足六位以0补齐,超过六位按四舍五入截断

以指数形式输出小数时,输出结果为科学计数法;也就是说,尾数部分的取值为:0≤尾数<10

在进制转换中提到过由于小数部分的转换算法,有许多小数是无法成功换算的,会导致有些时候无法精确输出

将整数赋值给float变量时会变成小数

#include <stdio.h>int main(void){float a = 0.302;float b = 128.101;double c = 123;float d = 112.64E3;double e = 0.7623e-3;float f = 1.1351398;float n = 0.00001;float m = 12.84;printf("a=%e\nb=%f\nc=%lf\nd=%lE\ne=%lf\nf=%f\nn=%g\nm=%g\n", a, b, c, d, e, f,n,m);return 0;}

运行结果:

a=3.020000e-01b=128.100998c=123.000000d=1.126400E+05e=0.000762f=1.13n=1e-05m=12.84

小数和整数间的相互赋值

将整数赋值给小数类型,只需要在小数点后面加0就可以了

将小数赋给整数类型的话则是需要完全舍弃掉小数部分,不是四舍五入,是完全舍弃

例如 int a =1.9999 得到的结果是 a=1

二、数据类型转换

数据类型间的转换低位(字节数短)转换成高位(字节数长)是合法的 系统默认强制转换

整数:char->short->int->long(unsigned char->unsigned short->unsigned int->unsigned long)

小数:float->double

但是如果你是从高位转换为低位的话,就会发生数据丢失

丢失法则:从低到高获取到对应低数据类型的位后,高位数据全部不要

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。