Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,长时间int-cast可以工作多久?_Java_Casting - Fatal编程技术网

在Java中,长时间int-cast可以工作多久?

在Java中,长时间int-cast可以工作多久?,java,casting,Java,Casting,这个问题不是关于a如何转换,而是当我们错误地将它转换为int时会发生什么 请考虑这个代码-< /p> @Test public void longTest() { long longNumber = Long.MAX_VALUE; int intNumber = (int)longNumber; // potentially unsafe cast. System.out.println("longNumber = "+lon

这个问题不是关于a如何转换,而是当我们错误地将它转换为int时会发生什么

请考虑这个代码-< /p>
   @Test
    public void longTest()
    {
        long longNumber = Long.MAX_VALUE;
        int intNumber = (int)longNumber; // potentially unsafe cast.
        System.out.println("longNumber = "+longNumber);
        System.out.println("intNumber = "+intNumber);
    }
这使输出-

longNumber = 9223372036854775807
intNumber = -1
longNumber = 9223372036854775757
intNumber = -51
现在,假设我做以下更改-

long longNumber = Long.MAX_VALUE - 50;
然后我得到输出-

longNumber = 9223372036854775807
intNumber = -1
longNumber = 9223372036854775757
intNumber = -51

问题是,如何将long的值转换为int?

获取
long
的低位32位,并将其放入
int

不过,以下是计算方法:

  • 将负值
    long
    视为
    2^64
    加上该值。所以
    -1
    被视为2^64-1。(这是无符号的64位值,它实际上是以二进制表示的。)
  • 取结果并按2^32进行修改。(这是无符号32位值。)
  • 如果结果>=2^31,则减去2^32。(这是有符号的32位值,即Java
    int

  • +1您可以执行
    (l&0xffffffffffl)>32
    来获得相同的值,而无需强制转换。或者您也可以执行
    l>32
    ,它将丢弃顶部位并进行符号扩展。啊,我知道这一点,但我不敢相信我在问问题时忘记了它!谢谢你的回答!