C连载11-可移植类型、double、float

一、可移植类型举例

1.系统不支持“精确宽度整数类型”怎么办?

最小宽度类型:一些类型名保证所表示的类型一定是至少有指定宽度的最小整数类型。

  • 使用上述定义的类型,例如:int_least8_t是可以容纳8位有符号整数值类型中的宽度最小的类型的一个别名,如果某系统的最小整数类型是16位,可能不会定义int8_t类型。尽管如此,该系统可能然会使用int_least8_t类型,但是可能把该类型实现为16位整数类型。

2.打印类型的转换有使用%d也有%ld的,该怎么办?

  • C语言提供了一些字符串宏来显示可移植类型。
  • 例如:inttypes.h头文件中定义了PRId32字符串宏,代表打印32位有符号值的合适转换说明。
#include<stdio.h>
#include<inttypes.h>  //支持可移植类型
int D11_1_altnames(void) {
 int32_t me32;  //me32是一个32为有符号的整形变量
 me32 = 45933945;
 printf("First,assume int32_t is int:");
 printf("me32 = %d
", me32);
 printf("Next,let's not make any assumptions.
");
 printf("Instead,use a "macro" from inttpes.h:");
 printf("me32 = %" PRId32 "
", me32);

 return 0;
}
 

运行结果
11.1

释义
在程序的最后一个printf()中,参数PRI32被定义在inttypes.h中的d所替换,因而这条语句等价于

printf("me32 = %""d""
",me32);

在C语言中,可以把多个连续的字符串组成一个字符串,依然等价于

printf("me32 = %d
",me32);

二、float、double、long double

1.C中的规定

  • C规定float类型必须至少能表示6位有效数字,且取值范围至少为10^-3710^37
  • 通常系统存储一个浮点数要占用32位,其中8位用于存储指数的值和符号,其余24位表示非指数部分及其符号(也称为尾数或者有效数)。
  • double占用64位而不是32位,不同系统多出来的32位有的用于表示指数,扩大表示范围;有的用于表示有效数字部分,提高精度。
  • long double来满足更高精度的要求,然而C只保证long double类型至少与double类型精度相同。

2.浮点型常量

  • 可以这样表示3.1541.24e12.8E12100.

注意点:不要在浮点型常量中间加空格,如:8.3 E12和这样是错的

  • 浮点数默认是double类型,如果是float需要后缀加F或f;如果是long double需要后缀加L或l
  • C99标准添加了一种新的浮点型常量格式——用十六进制表示浮点型常量, 即在十六进制数前面加上0x或0X,用p和P分别替代e和E,用2的幂代替10的幂,·如:0x1.ap12,但并非所有编译器支持这个特性。

三、源码:

原文地址:https://www.cnblogs.com/ruigege0000/p/13211298.html