long a = (long)Math.pow(2, 32);
// a = 4294967296 :)
long a = (int)(long)Math.pow(2, 32);
//a = 0 ?!
long a = (int)Math.pow(2, 32);
//a = 2147483647 WTF??!!!
Der erste Ausdruck ist offensichtlich. a wird so gedruckt wie es ist.Java - TypeCasting Frage
Der zweite Ausdruck ist ein wenig verwirrend. Der große Wert ist
100000000000000000000000000000000 // 1 von 32 Nullen, 33 Bits in allen
Wenn sie in ein int gezwungen wird, wie sie als Null ist? Sollte es nicht die höchstwertige 1 als Vorzeichenbit nehmen und denken, dass die Zahl -2147483648 ist?
Auch, wenn die Doppel von Math.pow (4.294967296E9) zurückgegeben wird direkt in int umgewandelt, warum ist es 2147483647?
Ich lese Typcasting und Datentypen aus einem Buch, aber der Text erklärt nicht viel. Ich bin verwirrt. Bitte erläutern Sie, warum der zweite und der dritte Ausdruck diese Ergebnisse ergeben.
Sie sagen, es schneidet alles nach den ersten 32 Bits ab. Aber die 1 ist innerhalb der "ersten 32 Bits", wenn sie als Binärzahl geschrieben wird. Was du sagst, wird wahr sein, wenn es 32 ZEROs gab und dann gab es eine 1. Aber es gibt 31 ZEROs und dann eine 1.Wenn es nach 32 Bits abgeschnitten wird, sollte 1 nicht abgeschnitten werden! –
'2^32' ist eine 1, gefolgt von 32 Nullen in Binärform. Auf die gleiche Weise ist "10^10" eine Eins gefolgt von 10 Nullen in Dezimal. http://coppervinesoftware.com/2to32.png – jdmichal
Hoppla! Mein Fehler. Entschuldigung :) Jetzt bekomme ich es ..: D +1 –