类型转换与可移植性数据

文章讨论了C语言中的类型转换,包括隐式和强制转换,以及它们如何影响数据精度。同时,它阐述了整型数据尺寸的系统依赖性,指出C语言标准并未规定具体尺寸,这可能导致代码在不同系统间的可移植性问题。为解决此问题,文章提出了使用typedef创建可移植的整型数据类型,如int32_t和int64_t。
摘要由CSDN通过智能技术生成

类型转换

概念:不一致但相互兼容的数据类型,在同一表达式中将会发生类型转换。
转换模式:

  • 隐式转换:系统按照隐式规则自动进行的转换
  • 强制转换:用户显式自定义进行的转换

隐式规则:从小类型向大类型转换,目的是保证不丢失表达式中数据的精度
系统自动转换
隐式转换示例代码
char a = ‘a’;
int b = 12;
float c = 3.14;
float x = a + b - c; // 在该表达式中将发生隐式转换,所有操作数被提升为floa

强制转换:用户强行将某类型的数据转换为另一种类型,此过程可能丢失精度
char a = ‘a’;
int b = 12;
float c = 3.14;
float x = a + b - (int)c; // 在该表达式中a隐式自动转换为int,c被强制转为int

不管是隐式转换,还是强制转换,变换的都是操作数在运算过程中的类型,是临时的,操作数本身的类型不会改变,也无法改变。

整型数据尺寸

概念:整型数据尺寸是指某种整型数据所占用内存空间的大小

C语言标准并未规定整型数据的具体大小,只规定了相互之间的 “ 相对大小 ” ,比如:

  • short 不可比 int 长
  • long 不可比 int 短
  • long 型数据长度等于系统字长

系统字长:CPU 一次处理的数据长度,称为字长。比如32位系统、64位系统。

典型尺寸:

  • char 占用1个字节
  • short 占用2个字节
  • int 在16位系统中占用2个字节,在32位和64位系统中一般都占用4个字节
  • long 的尺寸等于系统字长
  • long long 在32位系统中一般占用4个字节,在64位系统中一般占用8个字节

存在问题:

  • 同样的代码,放在不同的系统中,可能会由于数据尺寸发生变化而无法正常运行。
  • 因此,系统标准整型数据类型,是不可移植的,这个问题在底层代码中尤为突出。

可移植性数据

概念:不管放在什么系统,尺寸保持不变的整型数据,称为可移植性数据。
关键词:typedef
typedef int int32_t; // 将类型 int 取个别名,称为 int32_t
typedef long int64_t; // 将类型 long 取个别名,称为 int64_t
在这里插入图片描述
typedef long int_32t;语句会被放在系统的头文件中(/usr/include/stdint.h)。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值