This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.

Hi Daniel: I know the integer range (-2,147,483,648 to 2,147,483,647) cannot accomodate product of 1 million by 1 million (1000,000,000,000). My question is how I got -727,379,968

If an integer multiplication overflows, then the result is the low-order bits of the mathematical product as represented in some sufficiently large two's-complement format. As a result, if overflow occurs, then the sign of the result may not be the same as the sign of the mathematical product of the two operand values.

1000000*1000000 results in an overflow. The lower-order 32 bits (int is 32 bits) are 0xd4a51000 which is -727,379,968. [This message has been edited by Nain Hwu (edited October 09, 2001).]

Madan, Gopal
Ranch Hand

Joined: Aug 13, 2001
Posts: 86

posted

0

Hi Nain: When i fed the Hex # you said is the low-order 32 bits in NT calc. I am getting 3567587328 and not the number you said/I asked. Also, can you explain/write down how you got 0xD4A51000. Thanks

Nain Hwu
Ranch Hand

Joined: Sep 16, 2001
Posts: 139

posted

0

Madan, I used the toHexString() method in class Integer. Here is what I did:

Here is the output:

D:\pfe101i>java Test d4a51000 -727379968

Notice that 0xd4a51000 is a negative integer value (in java, integer is stored as two complement value). Looks like NT calc treats it as a positive value, which gives you 3567587328. Hope this help.