转换隐含时为什么要转换?

时间:2018-04-22 16:45:53

标签: c casting

我在c中看到了一些代码

git log

铸造的好处是什么,即使在这种情况下它是隐含的?哪个操作首先是x + y或首先是x?

1 个答案:

答案 0 :(得分:7)

在这种情况下,演员可以达到目的。如果你写了

int x = 4, y = 6;
long z = x + y;

将对int值执行添加,然后,总和将转换为long。因此添加可能会溢出。在这种情况下,强制转换一个操作数会导致使用long值执行加法,从而减少溢出的可能性。

(显然,在46的情况下,它无论如何都不会溢出。)

在回答第二个问题时,写下

long z = (long)x + y;

首先应用演员,这很重要。另一方面,如果你写了

long z = (long)(x + y);

将在添加之后应用演员阵容(并且为时已晚,因为已经在整体上执行了添加)。

同样,如果你写

float f = x / y;

甚至

float f = (float)(x / y);

分区将在int值上执行,并将丢弃剩余部分,f最终将包含0.但是如果你写的话

float f = (float)x / y;

除法将使用浮点执行,f将收到0.666666。