Datatyper i java

Tags:    integer java

Hej, jeg har spekuleret lidt over hvad der foregår når man overskrider datatypens længde ved addition af to integers i java.

Jeg er nået frem til et kvalificeret bud, som jeg til lejligheden har oprettet en hurtig blog omkring, men vil meget gerne have lidt respons på om mine gætterier overhovedet er rigtige.

link til blogindlæg

Mvh Niclas :bounce:



3 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Er vist noget med at den sidste bit i et 32 bit langt ord, bruges til at angive om tallet er negativt eller positivt. 0 er vist for positiv og 1 for negativ. Du kan evt. læse om two's complement, og Most SIgnificant Bit (MSB).

Uden at være ekspert om det overhovedet er dette du skal se på, så tror jeg at det er det som sker og er det som du prøver at forklarer om i dit lille blog indlæg :)



Indlæg senest redigeret d. 10.09.2011 14:48 af Bruger #4487
Når to integers lægges sammen, sker det, som om de er unsigned.
Dvs. at alle 32 bits bruges, og hvis de når udover 32 bits, så "forsvinder" den 33. bit bare men de nederste 32 bits bruges.
MEN, som andre har sagt, så er integers signed, og fortolkes to komplementært.

Det betyder, at resultatet af at lægge to store positive integers sammen, kan blive negativt:
Fold kodeboks ind/udJava kode 


I koden ovenfor skriver jeg først værdien af den højeste mulige integer, både decimalt og hexadecimalt.
I anden linje skriver jeg værdien af -1, decimalt og hexadecimalt.
I linjen derefter skriver jeg summen af den højest mulige integer og 1.
Sidste linje viser summen af to højeste integers.

Resultatet er:
Fold kodeboks ind/udKode 


Det giver mening, at hex 7fffffff + 1 er 80000000. Men det fortolkes altså to komplementært som -1.



t