我在c中看到了一些像这样的代码
int main()
{
int x = 4, y = 6;
long z = (long) x + y;
}
Run Code Online (Sandbox Code Playgroud)
即使在这种情况下它是隐含的,铸造的好处是什么?哪个操作先x + y或先x?
在这种情况下,演员阵容可以达到目的.如果你写的
int x = 4, y = 6;
long z = x + y;
Run Code Online (Sandbox Code Playgroud)
将对int值执行添加,然后,将总和转换为long.因此添加可能会溢出.在这种情况下,转换一个操作数会导致使用long值执行加法,从而减少溢出的可能性.
(显然,在的情况下,4和6它不会反正溢出.)
回答你的第二个问题,当你写作
long z = (long)x + y;
Run Code Online (Sandbox Code Playgroud)
演员肯定是先申请,这很重要.另一方面,如果你写的话
long z = (long)(x + y);
Run Code Online (Sandbox Code Playgroud)
在添加之后将应用强制转换(并且为时已晚,因为已经在整数上执行了添加).
同样,如果你写
float f = x / y;
Run Code Online (Sandbox Code Playgroud)
甚至
float f = (float)(x / y);
Run Code Online (Sandbox Code Playgroud)
除法将在int值上执行,并将丢弃余数,f最终将包含0.但如果你写的话
float f = (float)x / y;
Run Code Online (Sandbox Code Playgroud)
除法将使用浮点执行,f并将收到0.666666.