通过在java中签名扩展整数的最大值

通过在java中签名扩展整数的最大值,java,Java,所以我试过这样做 int extendedInteger = 0 & 0xff; 但这似乎不起作用, 我试图通过签名来扩展最大值, 这样它就可以保存大于Integer.MAX_的值。 我是说把整数设为64位 我仍在学习这门语言,非常感谢您的帮助。Integer(int)是java中的一种基本类型,占用内存32位int已签名,您所能做的任何事情都不会改变这一点 您要做的是使用原语类型long,它在内存中使用64位,允许它最多存储9223372036854775807的值long也有签名,

所以我试过这样做

int extendedInteger = 0 & 0xff;
但这似乎不起作用, 我试图通过签名来扩展最大值, 这样它就可以保存大于Integer.MAX_的值。 我是说把整数设为64位

我仍在学习这门语言,非常感谢您的帮助。

Integer(int)是java中的一种基本类型,占用内存32位
int
已签名,您所能做的任何事情都不会改变这一点

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


因此,您的变量应该是
long extendedInteger

如果您的意思是像“c++”中那样的有符号和无符号,java对此没有规定。对于大于Integer.MAX_值的值,请长时间保存。

一个int可以有232个不同的值,原则上取决于您。这只是一个解释的问题(尽管大多数可能的解释都很难做到)。如果你想把它解释为从0到232-1,你可以,而且很简单。java“没有无符号整数”不是一个严重的问题,对于大多数操作来说,这没有任何区别:

  • 加减法
  • 按位和/或/异或
  • 左移
  • 倍增
  • 平等比较
对于某些操作,它确实会产生影响:

  • 右移(使用
    >
  • 除法(仅转换为长代码)

  • 比较(其他)(强制转换为
    long
    或使用
    x)这里不清楚您要做什么-如果您需要存储大于
    Integer.MAX_值的值,那么只需使用
    long
    而不是
    int
    。我根本不理解这一点。“签名”是什么?可能是“签名”是他使用的其他PL中的一个术语。有关Java中基元类型的大小,请参阅此处。@harold我猜op尝试模拟,这些基元类型向右倾斜,介于0和2^32-1之间。@om nom nom so..unsigning?这很容易。我不同意后面的观点,因为使用有符号整数的主要原因是(除了业务逻辑限制外)是为了节省几个字节,这不是long允许您做的。@om-nom-nom是的,但这在java中是不可能的。此外,如果OP试图制造一个内存关键型系统,java可能不是适合的语言。这不完全正确,因为java 8对无符号算术的支持有限(比较、除法、转换)当然,如果你愿意,你可以让你的负整数作为无符号的,如果你在你的代码中做了大量的比特转换。但是我关于java是这种系统的一种糟糕语言的观点再次变得有效。