加入CSDN是出于记录,希望有不足之处多加指正。
1、数据类型的转换
- 概念:不一致的数据类型并且可以相互兼容的数据类型,在同一个表达式中可以相互转换。
- 隐式转换:系统会按照隐式转换的规则自动转换。
- 转换规则:从小的数据类型转换为大的数据类型,主要目的是确保精度不丢失。
- 强制转换:由用户要求进行的转换过程,有可能会造成精度丢失。
1. char > short > int > long > float > double > long double
2. char a = 'n';
3. int i = 1024;
4. float f = 4.331;
5. float x = a + i + f; //该表达式中发生了隐式转换规则,所有的数据都被临时转换为最高的精度
强制转换:由用户要求进行的转换过程,有可能会造成精度丢失。
1. char a = 'n';
2. int i = 1024;
3. float f = 4.131;
4. float g = (int)a + i + (int)f; //在表达式中,数据a 和f 都被用户强制转换为int
注意:数据类型的转换只在表达式中的临时转换并不会影响原来的数据。
2、数据类型的本质
- 概念:各种不同的数据类型,本质上是用户与系统之间对某一块内存内容解析的一个约定。
- 类型转换:对原本的约定进行临时的打破。我们可以对任何类型进行转换,但是转换之后不确保数据有意义。
3、数据类型的尺寸
- 概念:数据类型的尺寸指的是某个尺寸在指定系统中所占的内存区的大小。
- C语言中没有规定某个数据类型的具体大小,只规定了相对的大小关系
short 不会比 int 长
long 不可以比 int 短
long 类型就等于系统的字长
系统字长:CPU一次性可以处理的数据长度,就成为字长。
//代码
sizeof(long);
//linux 终端输入命令
getconfig LONG_BIT
- List item
典型尺寸:
char 占用1字节等于8位
short 占用2字节
int 在16位系统中占用2字节,在32位以及64位占用4字节
long 等于系统字长
long long 在32位中占用8字节,64位中占8字节
存在的问题:
同样的代码,在不同的操作系统中有可能出现不同的数据尺寸,可能会导致程序不可以正常运行。因此出现可移植数据类型。(stm32常用)
4、可移植性的数据类型
- 不管在任何的系统中,数据类型的尺寸都保持不变,就成为可移植数据类型。
- 关键词:typedef (把数据类型取别名)
typedef int int32_t ; // 把整型取别名为 int32_t
typedef long int64_t; //把长整型取别名为 int64_t
- 系统有一些预先定义好的可移植类型;
typedef signed char uint8_t;
typedef unsigned char uint8_t;
typedef signed short int int16_t;
typedef unsigned short int uint16_t;
typedef signed int int32_t;
typedef unsigned int uint32_t;
typedef signed long int int64_t;
typedef unsigned long int uint64_t;