我在c中看到了一些代码
git log
铸造的好处是什么,即使在这种情况下它是隐含的?哪个操作首先是x + y或首先是x?
答案 0 :(得分:7)
在这种情况下,演员可以达到目的。如果你写了
int x = 4, y = 6;
long z = x + y;
将对int
值执行添加,然后,总和将转换为long
。因此添加可能会溢出。在这种情况下,强制转换一个操作数会导致使用long
值执行加法,从而减少溢出的可能性。
(显然,在4
和6
的情况下,它无论如何都不会溢出。)
在回答第二个问题时,写下
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。