在Java中将双精度转换为无符号整数

在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

我正试图在Java中将一个double转换成一个无符号int

对于unsigned int,我指的是从0到4294967295的范围。
我使用
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