Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
674 views
in Technique[技术] by (71.8m points)

casting - How does long to int cast work in Java?

This question is not about how a long should be correctly cast to an int, but rather what happens when we incorrectly cast it to an int.

So consider this code -

   @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);
    }

This gives the output -

longNumber = 9223372036854775807
intNumber = -1

Now suppose I make the following change-

long longNumber = Long.MAX_VALUE - 50;

I then get the output -

longNumber = 9223372036854775757
intNumber = -51

The question is, how is the long's value being converted to an int?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The low 32 bits of the long are taken and put into the int.

Here's the math, though:

  1. Treat negative long values as 2^64 plus that value. So -1 is treated as 2^64 - 1. (This is the unsigned 64-bit value, and it's how the value is actually represented in binary.)
  2. Take the result and mod by 2^32. (This is the unsigned 32-bit value.)
  3. If the result is >= 2^31, subtract 2^32. (This is the signed 32-bit value, the Java int.)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...