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

1、可移植类型举例

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

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

  • 使用上述定义的类型,例如: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\n", me32);
 printf("Next,let's not make any assumptions.\n");
 printf("Instead,use a \"macro\" from inttpes.h:");
 printf("me32 = %" PRId32 "\n", me32);

 return 0;
}
 

运行结果
11.1 github

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

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

在C语言中,能够把多个连续的字符串组成一个字符串,依然等价于编辑器

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

2、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,但并不是全部编译器支持这个特性。

3、源码:

相关文章
相关标签/搜索