繁体   English   中英

使用不同的变量类型进行计算

[英]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."

请帮帮我。

如果将secondslightspeed都声明为intlightspeed * seconds计算为int s的乘积,这将导致溢出(因为16070400000000> 2147483647)。

如果将lightspeedsecondslong ,仍然可以将它们保留为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM