C语言程序设计(14)

89 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情
选择整数类型:

为什么整数要有这么多种?

为了准确表达内存,做底层程序的需要;

没有特殊需要,就选int,

现在的CPU的字长普遍是32位或者64位,一次内存读写就是一个int,一次计算也是一个int,选择更短的类型不会更快,甚至可能更慢;

现代的编译器一般会设计内存对齐,所以更短的类型实际在内存中也有可能占据一个int的大小(虽然sizeof告诉我们更小),

unsigned与否只是输出的不同,内部计算是一样的。

浮点类型

image.png

+-inf是正负无穷大,nan指不是一个有效数字。

浮点的输入输出

image.png

其中%e的意思是输出一个科学计数法的数字。

科学计数法

-5.67E+16

可选的+或-符号;

小数点也是可选的;

可以用e或E;

中间的符号可以是-或+(+可以省略);

整个词不能有空格。

 

输出精度

在%和f之间加上.n可以指定输出小数点后几位,这样的输出是做四舍五入的。

printf("%.3f\n",-0.0049);->-0.005

printf("%.30f\n",-0.0049);->-0.004899999999999999841793218991(浮点数的误差导致)

printf("%.3f\n",-0.00049);->0.000

超过范围的浮点数

printf输出inf表示超过范围的浮点数:正无穷/负无穷

printf输出nan表示不存在的浮点数。

浮点运算的精度

f1==f2可能失败;(因为有误差)

所以:判断方法为fabs(f1-f2)<1e-12;(f1减f2的绝对值是否小于一个很小的数)

小细节:带小数点的字面量是double而非float;

float需要用f或F后缀来表明身份。

浮点数的内部表达

sign:1bit;指数:11bit;分数:52bit。

浮点数在计算时是由专门的硬件部件实现的;

计算float和double所用的部件是一样的。