【问题标题】:what happens when a negative integer is type cast to long in java?在java中将负整数类型转换为long时会发生什么?
【发布时间】:2015-04-11 12:44:44
【问题描述】:
int i = 0;

long ll = 0L;

i = -1 - 2; //  -3

i = (int) -1 - 2; // -3

ll = (long) - (int) -1 - 2;// -1

i = (int) +(long) -(int) -1 - 2;//-1

ll = (long) +(int) -1 - 2; // -3

在上面的程序中一行

 ll = (long) - (int) -1-2;  

ll 的值为-1。仅通过类型转换,它的值如何变为-1?它不应该像 3 或 -3 吗?

【问题讨论】:

  • 您格式化示例和输出的方式非常混乱。虽然有点难读,但此类信息的最佳来源是“Java 语言规范”。从长远来看,首先查看该文档,确定相应的部分......并弄清楚发生了什么是非常有帮助的。
  • 你能分享你的研究吗?语言规范的哪一部分让您特别困惑?
  • this。一元减号在您的运算符中具有最高优先级,然后是强制转换运算符,然后是加法。 ((long) (-((int) -(1)))) - 2。所以你将-1 转换为int,然后应用一元减号以生成1,然后将1 转换为long,然后减去2。在某些地方放置空格以希望降低这些操作的优先级并没有真正起作用。
  • ll = (long) + (int) -1 - 2;// -1 将显示 -3 而不是 -1
  • @prashant 我已经编辑了问题中的行。

标签: java integer long-integer


【解决方案1】:
i = (int) +(long) -(int) -1 - 2;

因为一元运算符的优先级高于二元运算符,所以先计算一元运算符,然后计算二元运算符。

所以-(int) -1将首先被评估,它将变成+1

那么+(long)+1 将是+1

然后(int)+1 将被评估,因此它将成为+1

然后+1-2 将被评估为-1 所以你得到-1。其他语句也会执行相同的操作。

【讨论】:

    猜你喜欢
    • 2018-05-16
    • 2015-09-14
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2015-05-04
    • 2018-06-18
    相关资源
    最近更新 更多