[英]Compute using different variable types
我现在正在阅读Herbert Schildt撰写的《 Java:完全参考》,这对我来说还不是很清楚。 在有关整数的章节中,它说当需要大的整数时,应使用长型。 书中的代码示例:
// Compute distance light travels using long variables
class Light {
public static void main(String args[]) {
int lightspeed;
long days;
long seconds;
long distance;
// approximate speed of light in miles per second
lightspeed = 18600;
days = 1000; // specify number of days here
seconds = days * 24 * 60 * 60; // convert to seconds
distance = lightspeed * seconds; // compute distance
System.out.print("In " + days + " days light will travel about " + distance + " miles.");
}
}
执行后,控制台会为我提供以下结果:
"In 1000 days light will travel about 16070400000000 miles."
根据我的逻辑,天和秒var也应为int ,而其值应小于2147483647。
在此示例中,day = 1000,seconds = 86400 000,因此值并不大。
但是当我这样声明变量时:
int lightspeed, days, seconds;
long distance;
我得到的结果很奇怪,现在我无法接受。
"In 1000 days light will travel about -1367621632 miles."
请帮帮我。
如果将seconds
和lightspeed
都声明为int
, lightspeed * seconds
计算为int
s的乘积,这将导致溢出(因为16070400000000> 2147483647)。
如果将lightspeed
或seconds
为long
,仍然可以将它们保留为int
,这将强制对long
s进行乘法:
distance = (long)lightspeed * seconds;
要么
distance = lightspeed * (long)seconds;
是的,正如伊兰指出的那样,只有距离才是重要的。
如果您只是想到分手,这种行为就很容易记住。
假设a和b是整数,则上述a / b
执行整数除法(截断)
(double) a / b
会返回双倍。
请注意,类型转换始终是指其后的内容。 因此,在包含两个整数的表达式中, 只有第一个整数会强制转换为双精度。
`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.