Java中有符号整数常量的强制转换

Java中有符号整数常量的强制转换,java,Java,简单的问题,我有一些定制的java,允许有32位硬件变量。 我想为这样一个变量指定一个恒定的32位值,但是,这个命令失败了 在以下场景中: HWINTVar a = const.var(toHWint(32), 0xf1234567); HWINTVar a = const.var(toHWint(32), 0x11234567); 但在这种情况下有效: HWINTVar a = const.var(toHWint(32), 0xf1234567); HWINTVar a = const.

简单的问题,我有一些定制的java,允许有32位硬件变量。 我想为这样一个变量指定一个恒定的32位值,但是,这个命令失败了 在以下场景中:

HWINTVar a = const.var(toHWint(32), 0xf1234567);
HWINTVar a = const.var(toHWint(32), 0x11234567);
但在这种情况下有效:

HWINTVar a = const.var(toHWint(32), 0xf1234567);
HWINTVar a = const.var(toHWint(32), 0x11234567);
第一种情况下的错误消息是,常量值中可能会丢失关键数量的位,原因是我传递给此方法的常量是有符号的。有没有一种简单的方法可以告诉我如何在Java中将这个常量值解释为无符号值?我试过:

 HWINTVar a = const.var(toHWint(32), (unsigned int) 0xf1234567);
 HWINTVar a = const.var(toHWint(32), (unsigned integer) 0xf1234567);
但这显然无法在Java中工作,因为它不支持无符号数据类型。你知道怎么做吗


干杯

正确表示该常数的唯一方法是使用
long
literal,即
0xf1234567L


假设您能够更改
const.var
的定义,使其第二个参数使用
long
,并提取底部32位将其放入
HWINTVar

感谢您的反馈,它通过将常量存储为long,然后 对较低的32位使用掩码


HWINTVar a=const.var(toHWint(32),0xf1234567l&0xfffffff)

您可以发布var和toHWint方法吗?是什么给出了错误消息?有符号和无符号的区别在于位模式的解释。为0xf1234567存储的位是相同的,无论是有符号值还是无符号值。如果可以控制
const.var
,如果小心,可以使Java将有符号整数视为无符号整数。例如,参见番石榴。