在Java中将双精度转换为无符号整数
我正试图在Java中将一个double转换成一个无符号int 对于unsigned int,我指的是从0到4294967295的范围。在Java中将双精度转换为无符号整数,java,floating-point,data-conversion,unsigned-integer,Java,Floating Point,Data Conversion,Unsigned Integer,我正试图在Java中将一个double转换成一个无符号int 对于unsigned int,我指的是从0到4294967295的范围。 我使用int作为载体,它可以转换成一个字符串 我不在乎如果我 双精度是NaN 双精度是Inf或-Inf 双精度超出范围:4294967295 只要我得到任何结果 简单的强制转换不起作用: (int) 4294967295d == 2147483647 (int) 2147483648d == 2147483647 因此,有问题的范围是2147483648d
我使用
int
作为载体,它可以转换成一个字符串
我不在乎如果我
- 双精度是
NaN
- 双精度是
或Inf
-Inf
- 双精度超出范围:
或<0
>4294967295
(int) 4294967295d == 2147483647
(int) 2147483648d == 2147483647
因此,有问题的范围是2147483648d
-4294967295d
有没有快速的方法可以正确覆盖该范围
tl;dr:在C语言中,我会使用(unsigned int)dblValue
——在Java中,我会使用什么来实现这一点
4294967295f
那不是一件事。这种浮动并不存在。它变圆了。不要使用浮动,它们几乎没有意义。它起双重作用
有没有快速的方法可以正确覆盖该范围
一旦你意识到你的问题毫无意义,转而选择双打,是的。转换为长,转换为整型:
double d = 4294967295.0;
int i = (int) (long) d;
System.out.println(i);
System.out.println(Integer.toUnsignedString(i));
> -1
> 4294967295
对不起,关于
f
部分-在我的问题中修复了它。但是好的,如果我能正确猜出字节码,那就是D2L
后面跟着L2I
。不确定JIT会从中得到什么,但似乎很简单。如果需要,JIT很可能会完全优化它。但大多数情况下,我只是不知道如何用1字节字节的字节码来实现这一点,我认为2是一个相当不错的分数:P