C 类型转换

在 C 编程中,我们可以将一种数据类型(intfloatdouble 等)的值转换为另一种。这个过程称为类型转换。让我们看一个例子,

#include <stdio.h>

int main() {
    
int number = 34.78;
printf("%d", number); return 0; } // Output: 34

在这里,我们将双精度值 34.78 赋给整数变量 number。在这种情况下,双精度值会自动转换为整数值 34

这种类型的转换称为隐式类型转换。C 语言中有两种类型的类型转换:

  1. 隐式转换
  2. 显式转换

C 语言中的隐式类型转换

如前所述,在隐式类型转换中,一种类型的值会自动转换为另一种类型的值。例如,

#include<stdio.h>

int main() {

  // create a double variable
  double value = 4150.12;
  printf("Double Value: %.2lf\n", value);
 
// convert double value to integer int number = value;
printf("Integer Value: %d", number); return 0; }

输出

Double Value: 4150.12
Integer Value: 4150

上面的例子有一个值为 4150.12 的双精度变量。请注意,我们将双精度值赋给了整数变量。

int number = value;

在这里,C 编译器会自动将双精度值 4150.12 转换为整数值 4150

由于转换是自动进行的,因此这种类型的转换称为隐式类型转换。


示例:隐式类型转换

#include<stdio.h>

int main() {
    
  // character variable
  char alphabet = 'a';
  printf("Character Value: %c\n", alphabet);

// assign character value to integer variable int number = alphabet;
printf("Integer Value: %d", number); return 0; }

输出

Character Value: a
Integer Value: 97

上面的代码创建了一个字符变量 alphabet,值为 'a'。请注意,我们将 alphabet 赋给了整数变量。

int number = alphabet;

在这里,C 编译器会自动将字符 'a' 转换为整数 97。这是因为在 C 编程中,字符在内部存储为称为ASCII 值的整数值。

ASCII 定义了一组字符,用于在计算机中编码文本。在 ASCII 码中,字符 'a' 的整数值为 97,因此字符 'a' 会自动转换为整数 97

如果您想了解更多关于查找 ASCII 值的信息,请访问查找 C 中字符的 ASCII 值


C 语言中的显式类型转换

在显式类型转换中,我们手动将一种数据类型的值转换为另一种类型。例如,

#include<stdio.h>

int main() {

  // create an integer variable
  int number = 35;
  printf("Integer Value: %d\n", number);
  
// explicit type conversion double value = (double) number;
printf("Double Value: %.2lf", value); return 0; }

输出

Integer Value: 35
Double Value: 35.00

我们在上面的程序中创建了一个名为 number 的整数变量,值为 35。请注意代码,

// explicit type conversion
double value = (double) number;

这里,

  • (double) - 表示 number 要转换到的数据类型
  • number - 要转换为 double 类型的值

示例:显式类型转换

#include<stdio.h>

int main() {
    
  // create an integer variable
  int number = 97;
  printf("Integer Value: %d\n", number);
 
// (char) converts number to character char alphabet = (char) number;
printf("Character Value: %c", alphabet); return 0; }

输出

Integer Value: 97
Character Value: a

我们在上面的代码中创建了一个值为 97 的变量 number。请注意,我们正在将此整数转换为字符。

char alphabet = (char) number; 

这里,

  • (char) - 将 number 显式转换为字符
  • number - 要转换为 char 类型的值

类型转换中的数据丢失

在我们之前的示例中,当我们把双精度类型的值转换为整数类型时,小数部分的数据丢失了。

#include<stdio.h>

int main() {

  // create a double variable
  double value = 4150.12;
  printf("Double Value: %.2lf\n", value);
    
// convert double value to integer int number = value;
printf("Integer Value: %d", number); return 0; }

输出

Double Value: 4150.12 
Integer Value: 4150

在这里,数据 4150.12 被转换为 4150。在此转换中,小数部分 .12 丢失了。

这是因为 double 是比 int (4 字节) 更大的数据类型(8 字节),并且当我们将数据从更大的类型转换为更小类型时,会发生数据丢失。

同样,C 编程中存在数据类型层级。根据层级,如果高数据类型转换为低数据类型,则会丢失数据;如果低数据类型转换为高数据类型,则不会丢失数据。

Data is lost when converting from a higher data type to a lower data type
C 类型转换期间可能的数据丢失

这里,

  • 数据丢失 - 如果将 long double 类型转换为 double 类型
  • 无数据丢失 - 如果将 char 转换为 int
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战