Java Clojure中int的值超出范围
通常,在LibGDX中编程时,将十六进制值的整数传递给Color类就可以了:Java Clojure中int的值超出范围,java,clojure,Java,Clojure,通常,在LibGDX中编程时,将十六进制值的整数传递给Color类就可以了: new Color(0xeaeaeaff); 但是在Clojure做这件事 (Color. 0xeaeaeaff) 。。。生成错误java.lang.IllegalArgumentException:值超出int:3941264128的范围。确实,该值看起来超出了范围,非常明显。但是当我通常从Java来做的时候,根本就没有问题了 Clojure值的定义如下: (def color 0xff00ffff) 为什么会
new Color(0xeaeaeaff);
但是在Clojure做这件事
(Color. 0xeaeaeaff)
。。。生成错误java.lang.IllegalArgumentException:值超出int:3941264128的范围。确实,该值看起来超出了范围,非常明显。但是当我通常从Java来做的时候,根本就没有问题了
Clojure值的定义如下:
(def color 0xff00ffff)
为什么会发生这种情况?Java中的0xEAFF表示一个负数:
-353703169
并导致Clojure中溢出(Java只是将其溢出为负数)
在您的例子中,Java中的0xeaff
等于基数10中的-353703169
。您可以在Clojure中以-353703169
的格式编写,也可以在base 16中以-16r15151501
的格式编写
您可以使用noisesmith指出的
unchecked int
。0xEAEAFF
在Java中表示负数:-353703169
并导致Clojure溢出(Java只是将其溢出为负数)
在您的例子中,Java中的0xeaff
等于基数10中的-353703169
。您可以在Clojure中以-353703169
的格式编写,也可以在base 16中以-16r15151501
的格式编写
您可以使用noisesmith指出的
未选中的int
。在Java中,使用十六进制数字的文字表示法生成int
s,因此0xeaeaeaff
是一个值为-353703169
的int,因为它超过了int的最大值,溢出并成为负int。
在Clojure中,0xeaff
生成一个值为3941264127
的长字符串
LibGDX的类com.badlogic.gdx.graphics.Color
有一个构造函数,该构造函数需要int
,但没有一个构造函数需要long
,在Clojure案例中,您将传递给它,因此出现异常:java.lang.IllegalArgumentException:int的值超出范围:39412641128。
您可以将-353703169
传递给构造函数,或者像Piotrek建议的那样使用(Integer/parseUnsignedInt“eaeaff”16)
,因为这可能更方便,可能通过包装函数:
(defn hex->int [arg]
(Integer/parseUnsignedInt arg 16))
在Java中,对十六进制数使用文字表示法会产生
int
s,因此0xeaeaeaff
是一个值为-353703169
的int,因为它超过了int的最大值,溢出并成为负int。
在Clojure中,0xeaff
生成一个值为3941264127
的长字符串
LibGDX的类com.badlogic.gdx.graphics.Color
有一个构造函数,该构造函数需要int
,但没有一个构造函数需要long
,在Clojure案例中,您将传递给它,因此出现异常:java.lang.IllegalArgumentException:int的值超出范围:39412641128。
您可以将-353703169
传递给构造函数,或者像Piotrek建议的那样使用(Integer/parseUnsignedInt“eaeaff”16)
,因为这可能更方便,可能通过包装函数:
(defn hex->int [arg]
(Integer/parseUnsignedInt arg 16))
使用与输入相同的文本,获得Java将提供给您的相同值的最简单方法是使用
unchecked int
。它将返回一个负数(溢出),就像原始的一样,而不是给出一个越界错误
+user=> (unchecked-int 0xeaeaeaff)
-353703169
使用与输入相同的文本,获得Java将提供给您的相同值的最简单方法是使用
unchecked int
。它将返回一个负数(溢出),就像原始的一样,而不是给出一个越界错误
+user=> (unchecked-int 0xeaeaeaff)
-353703169
在Clojure中,-16r353703169远远超出范围。也许你的意思是-16雷亚夫?但是,它验证的值仍然超出范围。很抱歉输入错误。我已经修复了它-它应该是
-16r15151501
,因为353703169
base 10等于15151501
base 16。是否有可能使用某种形式的av十六进制表示法,而不必首先通过Java验证十六进制验证的整数?也就是说,是否可以向Java的0xEAEAFF写入类似于-16REEAFF验证的内容?0xEAEAFF
超出范围,在Java中强制转换为int
时会导致溢出为负数。您可以尝试(Integer/parseUnsignedInt“eaeaeaff”16)
,其行为类似(需要Java 8)。0xeaeaeaff是有效的clojure数字文本。在clojure中,-16r353703169超出范围。也许你的意思是-16雷亚夫?但是,它验证的值仍然超出范围。很抱歉输入错误。我已经修复了它-它应该是-16r15151501
,因为353703169
base 10等于15151501
base 16。是否有可能使用某种形式的av十六进制表示法,而不必首先通过Java验证十六进制验证的整数?也就是说,是否可以向Java的0xEAEAFF写入类似于-16REEAFF验证的内容?0xEAEAFF
超出范围,在Java中强制转换为int
时会导致溢出为负数。您可以尝试(Integer/parseUnsignedInt“eaeaeaff”16)
,其行为类似(需要Java 8)。0xeaeaeaff是一个有效的clojure数字文本。解释很好,但不需要此函数:只需使用,(unchecked int 0xeaeaeaff)
。解释很好,但不需要此函数:只需使用,(未选中int 0xeaff)
。