首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中声明无符号int

在Java中声明无符号int
EN

Stack Overflow用户
提问于 2012-03-25 02:07:35
回答 11查看 565.6K关注 0票数 366

有没有办法在Java中声明一个无符号的int?

或者,问题也可能是这样的:什么是未签名的Java等价物?

我只是想告诉你我正在研究的是Java的String.hashcode()__实现。我想测试一下如果整数是32无符号整型的话冲突的可能性。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2012-03-25 02:11:29

Java没有用于unsigned integers的数据类型。

如果需要存储较大的值,则可以定义long而不是int

也可以像使用无符号整数一样使用有符号整数。two's complement representation的优点是,对于有符号整数和无符号整数,大多数运算(如加、减、乘和左移)在二进制级别上是相同的。然而,一些操作(除法、右移、比较和强制转换)是不同的。从JavaSE8开始,Integer类中的新方法允许您充分使用int数据类型to perform unsigned arithmetic

在JavaSE8和更高版本中,您可以使用int数据类型来表示无符号32位整数,它的最小值为0,最大值为2^32-1。使用integer类可以将int数据类型用作无符号整数。像compareUnsigneddivideUnsigned等静态方法已经被添加到Integer类中,以支持无符号整数的算术运算。

请注意,在声明时,int变量仍然是有符号的,但是通过在Integer类中使用这些方法,现在可以进行无符号运算。

票数 359
EN

Stack Overflow用户

发布于 2013-11-26 01:04:58

票数 74
EN

Stack Overflow用户

发布于 2014-04-08 21:10:13

int中的值是有符号的还是无符号的取决于如何解释位- Java将位解释为有符号值(它没有无符号的原语)。

如果你有一个想要解释为无符号值的整数(例如,你从一个你知道应该被解释为无符号值的DataInputStream中读取一个整数),那么你可以做下面的技巧。

int fourBytesIJustRead = someObject.getInt();
long unsignedValue = fourBytesIJustRead & 0xffffffffL;

请注意,十六进制文字是一个长文字,而不是一个整数文字,这一点很重要--因此在末尾要加上'L‘。

票数 74
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9854166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档