第一阶段04 C语言数据类型

加入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;

Guess you like

Origin blog.csdn.net/m0_61557794/article/details/121655475