📜  C-类型转换(1)

📅  最后修改于: 2023-12-03 15:14:05.081000             🧑  作者: Mango

C类型转换

在C语言中,有时需要将一种数据类型转换为另一种数据类型。这个过程称为类型转换。

C中的类型转换包括两种,一种是隐式类型转换,另一种是显式类型转换。隐式类型转换是由编译器自动完成的,而显式类型转换需要程序员显示地告诉编译器进行类型转换操作。

隐式类型转换

在C语言中存在四种隐式类型转换:

  1. 整数提升:当一个操作符的操作数有较小的整数类型时,它们首先被转换为较大的整数类型。
short s = 10;
int i = s;  // 隐式转换为int类型
  1. 参数类型匹配:如果一个函数的形参类型与实参类型不匹配,编译器将尝试将实参类型转换为形参类型。
int i = 10;
float f = 1.23;
printf("%f", i + f);  // 整型变量i会隐式转换成浮点型
  1. 赋值类型转换:当一个值被赋给一个变量时,它将被转换为变量的类型。如果被赋值的值比变量的类型更小,则被转换为变量的类型。否则,值被截断,并且只保留变量类型的低位。
int i = 50000;  // i的值会截断为-15536
short s = i;
  1. 表达式类型转换:当两个不同类型的表达式进行操作或运算时,较小的类型将转换为较大的类型。
short s = 100;
int i = 200;
printf("%d", s + i);  // s会被隐式转换为int类型
显式类型转换

相对于隐式类型转换,显式类型转换意味着程序员需要手动指定转换的数据类型。

C语言中存在三种显式类型转换:

  1. 强制类型转换:使用强制类型转换运算符。强制类型转换趋向于将一个大的数据类型转换为一个小的数据类型。
int i = 10;
float f = (float)i;  // 显式转换为float类型
  1. const转换:const限定符可以用于数据类型的强制转换,使其只读。
int i = 10;
const int *p = &i;  // 将int类型转换为const int类型
  1. 位字段转换:位字段允许程序员自定义数据类型,这种自定义类型可以按比特位存储。
struct {
   unsigned char widthValidated;
   unsigned char heightValidated;
} status;

unsigned int data = 0x10;
status.widthValidated = data & 0x01;