C 语言中的类型转换:类型转换、隐式、显式及示例
C 语言中的类型转换是什么?
类型转换是将一种数据类型转换为另一种数据类型。在 C 语言中,它也称为数据转换或类型转换。它是 C 语言中引入的重要概念之一。
C 语言提供了两种类型的类型转换操作:
- 隐式类型转换
- 显式类型转换
隐式类型转换
隐式类型转换是指在不丢失原始含义的情况下转换数据类型。当您想更改数据类型而不更改变量中存储的值的意义时,此类型转换至关重要。
当值被复制到其兼容的数据类型时,C 语言会自动发生隐式类型转换。在转换过程中,会应用严格的类型转换规则。如果操作数是两种不同的数据类型,则数据类型较低的操作数会自动转换为较高的数据类型。这种类型的类型转换可以在以下示例中看到。
#include<stdio.h> int main(){ short a=10; //initializing variable of short data type int b; //declaring int variable b=a; //implicit type casting printf("%d\n",a); printf("%d\n",b); }
输出
10 10
- 在给定的示例中,我们声明了一个值为 10 的 short 类型变量。
- 在第二行,我们声明了一个 int 类型变量。
- 在第三行,我们将变量 s 的值赋给了变量 a。在第三行,执行了隐式类型转换,因为变量 s(short 类型)的值被复制到了变量 a(int 类型)。
将字符转换为整数
考虑将 ASCII 编码的字符与整数相加的示例
#include <stdio.h> main() { int number = 1; char character = 'k'; /*ASCII value is 107 */ int sum; sum = number + character; printf("Value of sum : %d\n", sum ); }
输出
Value of sum : 108
在此,编译器通过在执行实际加法运算之前将 'k' 的值转换为 ASCII 来执行整数提升。
算术转换层级
编译器首先继续将字符提升为整数。如果操作数仍然具有不同的数据类型,则它们会被转换为以下层级图中最髙的数据类型。
让我们看一个例子来理解这个概念
#include <stdio.h> main() { int num = 13; char c = 'k'; /* ASCII value is 107 */ float sum; sum = num + c; printf("sum = %f\n", sum );}
输出
sum = 120.000000
首先,c 变量被转换为整数,但编译器会将 num 和 c 转换为“float”并将它们相加,以产生“float”结果。
关于隐式转换的重要注意事项
- 隐式类型转换也称为标准类型转换。在隐式类型转换中,我们不需要任何关键字或特殊语句。
- 将较小的数据类型转换为较大的数据类型也称为类型提升。在上面的示例中,我们也可以说 s 的值被提升为整数类型。
- 隐式类型转换始终发生在兼容的数据类型之间。
我们无法对不兼容的数据类型执行隐式类型转换,例如:
- 将 float 转换为 int 会截断小数部分,从而丢失值的意义。
- 将 double 转换为 float 会四舍五入数字。
- 将 long int 转换为 int 会导致丢弃多余的高位。
在以上所有情况下,当我们转换数据类型时,值都会丢失其意义。通常,编译器会警告值的意义丢失。
C 语言提供了另一种类型转换方式,即显式类型转换。
显式类型转换
在隐式类型转换中,数据类型会自动转换。在某些情况下,我们可能需要强制类型转换。假设我们有一个变量 div,它存储了两个声明为 int 数据类型的操作数的除法结果。
int result, var1=10, var2=3; result=var1/var2;
在这种情况下,在对变量 var1 和 var2 执行除法后,存储在变量“result”中的结果将以整数格式显示。每当发生这种情况时,存储在变量“result”中的值都会丢失其意义,因为它不考虑通常在两个数字相除时获得的小数部分。
为了在这种情况下强制进行类型转换,我们使用显式类型转换。
它需要一个类型转换运算符。类型转换操作的一般语法如下:
(type-name) expression
此处,
- 类型名称是标准的 C 语言数据类型。
- 表达式可以是常量、变量或实际表达式。
让我们编写一个程序来演示如何在 C 语言中使用显式类型转换。
#include<stdio.h> int main() { float a = 1.2; //int b = a; //Compiler will throw an error for this int b = (int)a + 1; printf("Value of a is %f\n", a); printf("Value of b is %d\n",b); return 0; }
输出
Value of a is 1.200000 Value of b is 2
- 我们初始化了一个 float 类型的变量 'a'。
- 接下来,我们有另一个 integer 类型变量 'b'。由于变量 'a' 和 'b' 的数据类型不同,“C”不允许使用此类表达式,它会引发错误。在某些 C 版本中,表达式将被求值,但结果可能不符合预期。
- 为避免这种情况,我们对 float 类型的变量 'a' 进行了类型转换。通过使用显式类型转换方法,我们成功地将 float 转换为 integer 数据类型。
- 我们打印了变量 'a' 的值,它仍然是 float 类型。
- 类型转换后,结果始终是整数 'b'。
这样,我们就可以在 C 语言编程中实现显式类型转换。
摘要
- 类型转换也称为类型转换
- 它意味着将一种数据类型转换为另一种数据类型。
- 将较小的数据类型转换为较大的数据类型也称为类型提升。
- C 语言中有两种类型转换:隐式和显式类型转换。
- 当找到兼容的数据类型时,隐式类型转换会自动进行。
- 显式类型转换需要类型转换运算符。
在处理不同的数据类型以防止数据丢失时,请记住以下编程实践规则:
- 整数类型应转换为 float。
- Float 类型应转换为 double。
- 字符类型应转换为整数。