类型转换

类型转换与强制类型转换

要把变量从一种类型转换为另外一种类型,应把目标类型放在变量前面的括号中(即强制类型转换运算符)。

1. 基本语法

(目标类型)表达式

示例:上一节代码中 QuarterSold 是 long 类型,可通过强制转换变为 float:

RevQuarter = (float)QuarterSold / 150 * Revenue_Per_150;

这样 QuarterSold 的值会被显式地转换为 float 类型参与运算。

2. 转换整个表达式

如果要把整个表达式的结果从一种类型强制转换为另外一种类型,则需要把整个表达式放在括号里面:

result = (double)(a + b) / 2 - (a + b) / (double)(a * a + b * b);

3. 隐式类型转换(自动提升)

当二元运算符的两个操作数中有一个是 double 类型时,另一个操作数也会被自动强制转换为 double 类型,然后才进行运算。

例如上面代码中:

  • (double)(a+b) 将 a+b 的结果(int类型)强制转为 double,此时除数 2 也会被自动提升为 double,执行浮点数除法。
  • (double)(a*a + b*b) 同理,将整个分母强制转为 double,(a+b) 的结果也会被自动提升为 double。

4. 代码示例

#include <stdio.h>               
#include <limits.h>
#include <float.h>
#include <stddef.h>

int main(void) 
{ 
  	double result = 0.0;
	int a = 5;
	int b = 7;
	result = (double)(a+b)/2 - (a + b)/(double)(a*a + b*b);
  	printf("%lf",result);
	return 0;                        
}Code language: PHP (php)

运行解析:

表达式部分计算过程结果
(double)(a+b)(double)12 = 12.012.0
12.0 / 212.0 / 2.0 = 6.06.0
a*a + b*b25 + 49 = 7474
(double)(74)强制转为 74.074.0
(a+b) / 74.012 / 74.0 = 0.162...0.162162...
6.0 - 0.162162...浮点减法5.837838...

输出:5.837838(具体精度取决于 %lf 默认输出6位小数)

5. 核心要点

转换方式语法说明
强制类型转换​(类型)变量或表达式显式指定目标类型,优先级较高
隐式类型转换​自动发生混合类型运算时,向精度更高的类型提升
整型提升​char/short → int参与运算前自动提升
寻常算术转换​向更宽类型靠拢int + double → double

Previous:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注