尝试在java中查找长数据类型的范围

尝试在java中查找长数据类型的范围,java,Java,正在尝试验证java中的long范围。。为什么这个程序不起作用?它给出了无限循环(可能)。我没有在命令行中得到输出,并且光标一直闪烁 class range { public static void main(String [] args) { long i; for(i=0;;i++) { long c= (long)(i+1); if(i>c) //upper_limit+1=lower_limit

正在尝试验证java中的long范围。。为什么这个程序不起作用?它给出了无限循环(可能)。我没有在命令行中得到输出,并且光标一直闪烁

class range
{
public static void main(String [] args)
{
         long i;
     for(i=0;;i++)
    {
         long c= (long)(i+1);
         if(i>c)    //upper_limit+1=lower_limit
            break;  // hence, at i=upper_limit c(=i+1) < i

    }
    System.out.println("upper ="+i);
    for(i=-1;;i--)
    {
        long c=(long)(i-1);         
        if(i<c)             //lowerlimit-1=upperlimit
            break;          //hence at i=lowerlimit c(=i-1)>i
    }
    System.out.println("lower ="+i);
}
}
类范围
{
公共静态void main(字符串[]args)
{
龙我;
对于(i=0;i++)
{
长c=(长)(i+1);
如果(i>c)//上限+1=下限
break;//因此,在i=上限c(=i+1)
您的程序最终会运行-但它必须先执行263次迭代(在每个方向上)。这将需要很长的时间。找到这一点的方法比较简单。或者只看一下:

整数类型的值是以下范围内的整数:

  • 对于
    ,从-9223372036854775808到9223372036854775807,包括

如果希望看到程序找到正确的值,只需在接近最终结果时启动程序:

for(i=Long.MAX_VALUE - 10;;i++)
...
for(i=Long.MIN_VALUE + 10;;i--)
这将很快以以下输出结束:

upper =9223372036854775807
lower =-9223372036854775808
你的程序最终会工作的-但它必须先执行263次迭代(在每个方向上)。这将需要很长的时间。找到这一点的方法比较简单。或者看看:

整数类型的值是以下范围内的整数:

  • 对于
    ,从-9223372036854775808到9223372036854775807,包括

如果希望看到程序找到正确的值,只需在接近最终结果时启动程序:

for(i=Long.MAX_VALUE - 10;;i++)
...
for(i=Long.MIN_VALUE + 10;;i--)
这将很快以以下输出结束:

upper =9223372036854775807
lower =-9223372036854775808

为什么您认为您的程序不正确?它只是需要很长时间-直到长时间溢出(大约2^63次迭代)。我建议您使用
long.MIN_值
long.MIN_值
,或者如果您想避免此解决方案,请在溢出发生时使用


你也可以考虑使用同一个程序,用于<代码>短代码>代码,以验证它是正确的,只是非常耗时。

为什么你认为你的程序不正确?它只需要很长时间-直到长时间溢出(大约2 ^ 63次迭代)。我建议您使用
Long.MIN_值
Long.MIN_值
,或者如果您希望避免此解决方案,请在发生溢出时使用


您也可以考虑使用相同的程序,用于<代码>短代码>代码,以验证它是正确的,只是非常耗时。

您可以使用Lo.Max值和Lo.MyValue


枚举所有2^64个可能的长值需要很多时间

您可以使用long.MAX\u值和long.MIN\u值


枚举所有2^64个可能的长值需要很多时间

没有理由从0或-1开始

如果要验证最小/最大值,请按如下方式尝试:

class range
{
public static void main(String [] args)
{
         long i;
     for(i=Long.MAX_VALUE;;i++)
    {
         long c= (long)(i+1);
         if(i>c)    //upper_limit+1=lower_limit
            break;  // hence, at i=upper_limit c(=i+1) < i

    }
    System.out.println("upper ="+i);
    for(i=Long.MIN_VALUE;;i--)
    {
        long c=(long)(i-1);         
        if(i<c)             //lowerlimit-1=upperlimit
            break;          //hence at i=lowerlimit c(=i-1)>i
    }
    System.out.println("lower ="+i);
}
}
类范围
{
公共静态void main(字符串[]args)
{
龙我;
对于(i=Long.MAX_值;;i++)
{
长c=(长)(i+1);
如果(i>c)//上限+1=下限
break;//因此,在i=上限c(=i+1)
没有理由从0或-1开始

如果要验证最小/最大值,请按如下方式尝试:

class range
{
public static void main(String [] args)
{
         long i;
     for(i=Long.MAX_VALUE;;i++)
    {
         long c= (long)(i+1);
         if(i>c)    //upper_limit+1=lower_limit
            break;  // hence, at i=upper_limit c(=i+1) < i

    }
    System.out.println("upper ="+i);
    for(i=Long.MIN_VALUE;;i--)
    {
        long c=(long)(i-1);         
        if(i<c)             //lowerlimit-1=upperlimit
            break;          //hence at i=lowerlimit c(=i-1)>i
    }
    System.out.println("lower ="+i);
}
}
类范围
{
公共静态void main(字符串[]args)
{
龙我;
对于(i=Long.MAX_值;;i++)
{
长c=(长)(i+1);
如果(i>c)//上限+1=下限
break;//因此,在i=上限c(=i+1)
Long.MAX\u值
对你来说太主流了?你可以使用Long.MAX\u值和Long.MIN\u值?你试过调试你的程序吗?
Long.MAX\u值
对你来说太主流了?你可以使用Long.MAX\u值和Long.MIN\u值?你试过调试你的程序吗?但是
i>c
永远不会是
true
。没有?@marounnaroun它将溢出并变为负值。请尝试
Long.MAX\u VALUE+1
,您将看到:)谢谢。事实上,我只是一个JAVA乞丐,不知道Long.MAX\u VALUE/MIN\u VALUE变量。但是
i>c
永远不会
true
。不会吗?@marounnaroun它会溢出并变为负值。试试
Long.MAX\u VALUE+1
,你会看到:)谢谢..实际上我只是JAVA的乞丐,不知道Long.MAX\u VALUE/MIN\u VALUE变量。