开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情
选择整数类型:
为什么整数要有这么多种?
为了准确表达内存,做底层程序的需要;
没有特殊需要,就选int,
现在的CPU的字长普遍是32位或者64位,一次内存读写就是一个int,一次计算也是一个int,选择更短的类型不会更快,甚至可能更慢;
现代的编译器一般会设计内存对齐,所以更短的类型实际在内存中也有可能占据一个int的大小(虽然sizeof告诉我们更小),
unsigned与否只是输出的不同,内部计算是一样的。
浮点类型
+-inf是正负无穷大,nan指不是一个有效数字。
浮点的输入输出
其中%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所用的部件是一样的。