当前位置:编程学习 > JAVA >>

java基础一题

什么申明使得以下循环称为无限循环

(  ;)
while(i==i+1){  }

--------------------编程问答-------------------- 好基础啊,不会 --------------------编程问答-------------------- while(i==i+1){ }不是死循环
--------------------编程问答-------------------- for(;;) is ok! --------------------编程问答-------------------- double i = Double.POSITIVE_INFINITY; --------------------编程问答-------------------- 一个数永远不会等于它自己加1吗?i==i+1
一个数永远不会等于它自己加1,对吗?如果数字是整型,则对;如果这个数字是无穷大或都是浮点型足够大(如

1.0e40),等式就可能成立了。

 

Java强制要求使用IEEE 754浮点数算术运算,它可以让你用一个double或float来表示无穷大。

 

浮点型分为double型、float型。

 

无穷分为正无穷与负无穷。

 

无穷大加1还是无穷大。

 

一个浮点数值越大,它和其后继数值之间的间隔就越大。

 

对一个足够大的浮点数加1不会改变它的值,因为1不足以“填补它与其后者之间的空隙”。

 

浮点数操作返回的是最接近其精确数学结果的浮点数值。

 

一旦毗邻的浮点数值之间的距离大于2,那么对其中的一个浮点数值加1将不会产生任何效果,因为其结果没有达到两

个数值之间的一半。对于float类型,加1不会产生任何效果的最小数是2^25,即33554432;而对于double类型,最小

数是2^54,大约是1.8*10^16。

 

33554432F转二进制过程:
33554432的二进制为:10000000000000000000000000,将该二进制化成规范的小数二进制,即小数从右向左移25位

1.0000000000000000000000000,化成浮点数二进制0,25+127, 00000000000000000000000 00(丢弃最后两位),即0, 10011000, 00000000000000000000000,最后的结果为1.00000000000000000000000*2^25


毗邻的浮点数值之间的距离被称为一个ulp,它是最小单位(unit in the last place)的首字母缩写。在5.0版本中,引入了Math.ulp方法来计算float或double数值的ulp。

 

二进制浮点算术只是对实际算术的一种近似。

Java代码 
// 注,整型数不能被 0 除,即(int)XX/0运行时抛异常   
double i = 1.0 / 0.0;// 正无穷大   
double j = -1.0 / 0.0;// 负无穷大   
// Double.POSITIVE_INFINITY定义为:POSITIVE_INFINITY = 1.0 / 0.0;   
System.out.println(i + " " + (i == Double.POSITIVE_INFINITY));//Infinity true   
// Double.NEGATIVE_INFINITY定义为:NEGATIVE_INFINITY = -1.0 / 0.0;   
System.out.println(j + " " + (j == Double.NEGATIVE_INFINITY));//-Infinity true   
System.out.println(i == (i + 1));// true   
System.out.println(0.1f == 0.1);// false   
float f = 33554432;   
System.out.println(f + " " + (f==(f+1)));//3.3554432E7 true  

// 注,整型数不能被 0 除,即(int)XX/0运行时抛异常
double i = 1.0 / 0.0;// 正无穷大
double j = -1.0 / 0.0;// 负无穷大
// Double.POSITIVE_INFINITY定义为:POSITIVE_INFINITY = 1.0 / 0.0;
System.out.println(i + " " + (i == Double.POSITIVE_INFINITY));//Infinity true
// Double.NEGATIVE_INFINITY定义为:NEGATIVE_INFINITY = -1.0 / 0.0;
System.out.println(j + " " + (j == Double.NEGATIVE_INFINITY));//-Infinity true
System.out.println(i == (i + 1));// true
System.out.println(0.1f == 0.1);// false
float f = 33554432;
System.out.println(f + " " + (f==(f+1)));//3.3554432E7 true 

--------------------编程问答-------------------- --------------------编程问答-------------------- 多看书,如java puzzlers --------------------编程问答-------------------- 直接:
while(true){
System.out.println("while");
}
for(;;){
System.out.println("for");
} --------------------编程问答--------------------
引用 5 楼 dr_lou 的回复:
一个数永远不会等于它自己加1吗?i==i+1
一个数永远不会等于它自己加1,对吗?如果数字是整型,则对;如果这个数字是无穷大或都是浮点型足够大(如

1.0e40),等式就可能成立了。

 

Java强制要求使用IEEE 754浮点数算术运算,它可以让你用一个double或float来表示无穷大。

 

浮点型分为double型、float型。

 

无穷分为正……


佩服!!!! --------------------编程问答-------------------- 所以说哦,书是要看的

一切尽在《java解惑》中 --------------------编程问答-------------------- ding
引用 5 楼 dr_lou 的回复:
一个数永远不会等于它自己加1吗?i==i+1
一个数永远不会等于它自己加1,对吗?如果数字是整型,则对;如果这个数字是无穷大或都是浮点型足够大(如

1.0e40),等式就可能成立了。

 

Java强制要求使用IEEE 754浮点数算术运算,它可以让你用一个double或float来表示无穷大。

 

浮点型分为double型、float型。

 

无穷分为正……
--------------------编程问答-------------------- 对啊,上面说到很对啊,一个很大的数加上1后在java中可能会损失精度的问题啊! --------------------编程问答--------------------
引用 5 楼 dr_lou 的回复:
一个数永远不会等于它自己加1吗?i==i+1
一个数永远不会等于它自己加1,对吗?如果数字是整型,则对;如果这个数字是无穷大或都是浮点型足够大(如1.0e40),等式就可能成立了。
Java强制要求使用IEEE 754浮点数算术运算,它可以让你用一个double或float来表示无穷大。

原来如此 --------------------编程问答--------------------
引用 5 楼 dr_lou 的回复:
一个数永远不会等于它自己加1吗?i==i+1
一个数永远不会等于它自己加1,对吗?如果数字是整型,则对;如果这个数字是无穷大或都是浮点型足够大(如

1.0e40),等式就可能成立了。

 

Java强制要求使用IEEE 754浮点数算术运算,它可以让你用一个double或float来表示无穷大。

 

浮点型分为double型、float型。

 

无穷分为正……


顶!  学习了 --------------------编程问答-------------------- while(true) {}
书上有的,你没看书吗?很多很多的书在书店,你可以去取经... --------------------编程问答--------------------
引用 4 楼 zhuzeitou 的回复:
double i = Double.POSITIVE_INFINITY;


赞 --------------------编程问答--------------------  33554432F转二进制过程:
33554432的二进制为:10000000000000000000000000,将该二进制化成规范的小数二进制,即小数从右向左移25位

1.0000000000000000000000000,化成浮点数二进制0,25+127, 00000000000000000000000 00(丢弃最后两位),即0, 10011000, 00000000000000000000000,最后的结果为1.00000000000000000000000*2^25

晕了一半 --------------------编程问答-------------------- 学习一下! --------------------编程问答-------------------- 有何意义? --------------------编程问答-------------------- while(i==i+1){}
不论i为何值i==i+1都为假所以根本不会进入循环,怎么成为死循环。 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- for(;;;);
while(true){}; --------------------编程问答--------------------    如果是基础问题的话,就应该是

for(;;;);
while(true){};
  
  如果层次高点,就是精度的问题了 --------------------编程问答-------------------- 还有这回事啊,涨见识了... --------------------编程问答-------------------- while(true){}

for(;;){}; --------------------编程问答-------------------- 这个.....还有何意义啊!!我原以为i为boolean可以,结果int和boolean不兼容!!!
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,