通过在java中对其进行签名来扩展Integer的最大值

时间:2014-05-09 10:44:38

标签: java

所以我尝试过这样做,

int extendedInteger = 0 & 0xff;

但这似乎不起作用, 我试图通过签名来扩展最大值, 这样它可以容纳超过Integer.MAX_VALUE。 我的意思是将Integer设为64位?

我还在学习这门语言,而且我很感激任何帮助。

3 个答案:

答案 0 :(得分:3)

Integer(int)是java中的原始类型,占用内存中的32位。 int 已签名,您无法做任何改变。

您要做的是使用原始类型long,它在内存中使用64位,允许它存储最多9223372036854775807的值。 long也已签名,这意味着您可以转到-9223372036854775808

因此,您的变量将是long extendedInteger

答案 1 :(得分:2)

int可以有2个 32 个不同的值,它们原则上由你决定。这只是一个解释问题(虽然大多数可能的解释很难做到)。如果你想把它解释为从0到2 32 -1,你可以,而且很容易。那个java"没有无符号整数"这不是一个严重的问题,对于大多数操作来说,它没有任何区别:

  • 加/减
  • 按位和/或/ xor
  • 左移
  • 乘法
  • 比较(in)equality

对于某些操作,它确实有所作为:

  • 右移(使用>>>
  • 师(刚刚转为long
  • 比较(其他)(强制转换为long或使用x <u y = (x ^ (1<<31)) <s (y ^ (1<<31))
  • 转换为字符串(强制转换为long

当然对于long的演员阵容,你必须撤消符号扩展,例如像 value & 0xffffffffL

在Java 8中,Integer类包含替换上述解决方法的函数:

  • Integer.divideUnsigned
  • Integer.compareUnsigned
  • Integer.toUnsignedString

答案 2 :(得分:0)

如果您的意思是签名和未签名,就像在&#39; c ++&#39; java没有这方面的规定。对于保持大于Integer.MAX_VALUE的值,请长时间使用。