1。引起我注意这一点的原因是一个问题,描述如下:给定二维平面上的n个点,找到位于同一条直线上的最大点数。总体思路是给我一些点的X和Y坐标,找到点数最多的直线,输出这条直线上的点数所以我输入了下面的代码:importjava.util.HashMap;importjava.util.Map;//classPoint{//intx;//inty;//Point(inta,intb){x=a;y=b;}//}publicclassSolution{publicintmaxPoints(Point[]points){if(points.length<=2){返回点。长度;}最大整数=2;for(inti=0;i 第31位(由掩码*{@code0x80000000}选择的位)表示浮点数的符号*。*位30-23(由掩码选择的位*{@code0x7f800000})表示指数。*位22-0(掩码选择的位*{@code0x007fffff})表示浮动的重要性和(有时称为*尾数)-点数。** 如果参数为正无穷大,则结果为*{@code0x7f800000}。** 如果参数为负无穷大,则结果为*{@code0xff800000}。** 如果参数为NaN,则结果为{@code0x7fc00000}。** 在所有情况下,结果都是一个整数,当将其提供给*{@link#intBitsToFloat(int)}方法时,将产生一个浮点值*与{@codefloatToIntBits的参数相同}*(除了所有NaN值都折叠为单个*“规范”NaN值)。**@paramvalue一个浮点数。*@return表示浮点数的位。*/publicstaticintfloatToIntBits(floatvalue){intresult=floatToRawIntBits(value);//根据位字段的值、最大值//指数和非零尾数检查NaN。如果(((结果&FloatConsts.EXP_BIT_MASK)==FloatConsts.EXP_BIT_MASK)&&(结果t&FloatConsts.SIGNIF_BIT_MASK)!=0)结果=0x7fc00000;returnresult;}这个文档比较长,我也查了其他资料。点算术标准IEEE754标准提供了浮点无穷大、负无穷大、负零和NaN(非数字)的定义。在使用Java的过程中,通常会遇到一些特殊的浮点数让大家感到困惑。当浮点运算产生一个非常接近0的负浮点数时,就会产生“-0.0”,这个浮点数不能正常。我们可以输出Wave0.0和-0.0数据:System.out.println(Float.floatToIntBits((float)0.0));System.out.println(Float.floatToIntBits((float)-0.0));System.out.println(Float.floatToRawIntBits(0.0f));System.out.println(Float.floatToRawIntBits((float)-0.0));Result:0-21474836480-2147483648也就是说存储-0.0是实际上是0x80000000,也就是我们熟悉的Integer.MIN_VALUE3。总结java中浮点数的表示比较复杂,尤其是涉及到-0.0、NaN、正负无穷大的时候,不适合作为Map的key,因为可能和我们的不一致期望。
