尝试在java中查找长数据类型的范围
正在尝试验证java中的long范围。。为什么这个程序不起作用?它给出了无限循环(可能)。我没有在命令行中得到输出,并且光标一直闪烁尝试在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
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变量。