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

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

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

printf("me32 = %d\n",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,但并非所有编译器支持这个特性。

三、源码:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值