【问题标题】:Converting negative Integer.MIN to positive long [duplicate]将负 Integer.MIN 转换为正长 [重复]
【发布时间】:2017-10-28 23:25:45
【问题描述】:

我正在尝试使用以下代码将负 Integer.MIN 转换为正长值:

long lv = -1 * value_int;

上面的代码可以完美运行,除非 value_int = Integer.MIN_VALUE 的值。 Integer.MIN_VALUE 情况下,lv 的值始终为 Integer.MIN_VALUE;

以下代码适用于所有情况,包括 Integer.MIN_VALUE

long lv = value_int;
lv = -1 * value_int;

知道为什么 long lv = -1 * value_int 在 Integer.MIN_VALUE 情况下不起作用吗?

【问题讨论】:

  • @Oleg 这是一个 C# 问题/答案。虽然在这种情况下,问题可能非常相似,但它不是一个好的重复。
  • @ErwinBolwidt 你可能是对的。找到了另一个stackoverflow.com/questions/24755629/int-to-long-assignment,虽然也不是很合适。我可能应该停止浪费时间标记重复并回答明显的重复,如果没有人关心这里的内容质量,我为什么要这样做? (只是咆哮,不是针对你)

标签: java int


【解决方案1】:

1(在这种情况下,前面是一元 - 运算符)是一个 int 文字。因为value_int 也是int,所以乘法以int 的形式完成——溢出,然后才提升为long。如果您改用 long 文字,则乘法将作为 long 完成,您会得到正确的结果:

long lv = -1L * value_int;
// Here-----^

【讨论】:

  • 这是一个非常迂腐的观点,但根据 JLS -1 不是 int 文字。它是 int 字面量 1,前面是一元运算符 -.
  • 不错@cppbeginner,谢谢!相应地编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2023-03-14
  • 1970-01-01
  • 2018-06-11
  • 2020-04-04
  • 1970-01-01
  • 2015-06-14
相关资源
最近更新 更多