Menu Close

类型转换

类型转换将一种数据类型转换为另一种数据类型。 也称为数据转换或类型转换。 它是“ C”编程中引入的重要概念之一。

“ C”编程提供两种类型的类型转换操作:

  • 隐式转换 ( Implicit type casting )
  • 强制类型转换 ( Explicit type casting)

隐式转换

隐式类型转换意味着在不丢失其原始含义的情况下转换数据类型。 当您想更改数据类型而不更改变量内部存储的值的重要性时,这种类型转换是必不可少的。

将值复制到其兼容数据类型时,隐式类型转换会自动发生。 在转换期间,将应用严格的类型转换规则。 如果操作数具有两种不同的数据类型,则具有较低数据类型的操作数(占用空间较小)将自动转换为较高数据类型。 在下面的示例中可以看到这种类型的类型转换。

#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);
}

该例子的第六行,有个隐式数据转换。

把字符转换成整数

考虑添加一个以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 );
}

类型转换顺序结构

常用的算术转换是隐式地把值强制转换为相同的类型。编译器首先执行整数提升,如果操作数类型不同,则它们会被转换为下列层次中出现的最高层次的类型:

举例说明:

#include <stdio.h>
main()
{
   int  num = 13;
   char c = 'k'; /* ASCII value is 107 */
   float sum;
   sum = num + c;
   printf("sum = %f\n", sum );
}

运行结果:

强制类型转换

在隐式类型转换中,数据类型将自动转换。 在某些情况下,我们可能不得不强制进行类型转换。 假设我们有一个变量div,该变量为两个被声明为int数据类型的操作数的商。

int result, var1=10, var2=3;
result=var1/var2;

在这种情况下,在对变量var1和var2进行除法之后,存储在变量result中的结果将为整数格式。 每当发生这种情况时,存储在变量result中的值就会失去其含义,因为它没有考虑通常在两个数字的除法中获得的小数部分。

为了在这种情况下强制类型转换,我们使用显式类型转换。它需要类型转换运算符。 类型转换操作的一般语法如下:

(type-name) expression
  • type-name 是标准的C语言数据类型。
  • expression 表达式可以是常量,变量或实际表达式。

让我们编写一个程序来演示“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;
}

范例解释

  1. 我们已经初始化了一个float类型的变量’a’
  2. 接下来,我们有另一个整数数据类型的变量“ b”。 由于变量“ a”和“ b”具有不同的数据类型,因此“ C”将不允许使用此类表达式,并且会引发错误。 在某些版本的“ C”中,将对表达式进行求值,但结果将不理想。
  3. 为了避免这种情况,我们对float类型的变量’a’进行了类型转换。 通过使用强制类型转换的方法,我们已成功将float数据类型转换为类型整数。
  4. 打印出“ a”值,它是浮点数
  5. 经过类型转换后,“ b”为整数

摘要

  • 类型转换意味着将一种数据类型转换为另一种数据类型
  • 将较小的数据类型转换为较大的数据类型也称为类型提升
  •  C语言提供了隐式类型转换和显式的类型转换方式
  • 找到和睦兼容的数据类型后,隐式类型转换将自动运行
  • 显式类型转换需要类型转换运算符。