Snorre Skrevet 30. juni 2008 Del Skrevet 30. juni 2008 (endret) Sliter litt med et avsnitt i Java-boken min som omhandler initializing av variabler av typen byte med hexidesimale verdier. Kan jo egentlig bare skrive av avsnittet. One note of caution: Special care is needed when initializing variables of type byte and type short with hexidesimal values to avoid being caught out. For example, you might be tempted to initialize a variable of type byte to binary 1111 1111 with the following statement: byte allBitsOne = 0xFF; //Wrong In fact, this results in a compiler error message. The literal 0xFF is type int, so it the binary value 0000 0000 0000 0000 0000 0000 1111 1111. This happens to be equivialent to the decimal value 128, which is outside the range of type byte. The byte value you are looking for, 1111 1111, is equivialent to the decimal value -1, so the correct way to initialize allBitsOne to 1s is to write: byte allBitsOne = 0xFFFFFFFF; // Correct - well done Så vidt jeg har forstått angir binærtallet lengst til venstre om tallet er positivt eller negativt (+ eller -). Siden tallet er en integer er ikke tallet 1111 1111, men 0000 0000.... 1111 1111. Tallet er derfor positivt og har en verdi på 128, noe som er for høyt for byte-typen som kun takler tall opp til 127. Derav kommer altså compiler-erroren. Men så skjønner jeg ikke helt hva forfatteren vil fram til med resten. Hvordan kommer han fram til at den hexidesimale verdien 0xFFFFFFFF er lik -1, og hvorfor initialize variablen allBitsOne til akkurat -1? Edit: Har forstått sånn noenlunde hvordan han kom fram til -1, men hvordan teller man med negative binærtall? Med positive begynner man jo fra høyre mot venstre og hvert tall er dobbelt så stort som det forrige. Slik at 1010 blir det samme som 0+2+0+8=10. Men hvordan teller man hvis man går utifra at 1111 1111 tallet helt til venstre angir at tallet er negativt? Endret 30. juni 2008 av Snorre Lenke til kommentar
pgdx Skrevet 30. juni 2008 Del Skrevet 30. juni 2008 Svarer på det spørsmålet som jeg så lettest tilgjengelig: hvordan teller man hvis man går utifra at 1111 1111 tallet helt til venstre angir at tallet er negativt?Man teller som vanlig ... Det negative av 1+2+4+8+16+32+64 ( = 127), altså -127. Lenke til kommentar
blackbrrd Skrevet 30. juni 2008 Del Skrevet 30. juni 2008 (endret) Tenker dette kan være ok lesing: http://darksleep.com/player/JavaAndUnsignedTypes.html Kort sagt, den første siste bit'n sier om tallet er positivt eller negativt. 0000001 (1) +1111111 (-1) =0000000 (0) Mao start bakfra når du skal summere, 1+1 = 10, mao, bakerste tall er 0, det blir akkurat det samme for neste tall, 0+1+1(overflow fra første tallet vi la sammen) blir 10... osv.. helt til vi får overflow på det siste tallet - som blir hevet ut vinduet... Ser veldig ut som negative tall blir skrevet som 127-x, ikke at jeg fikk det til å stemme nå da.. Endret 30. juni 2008 av blackbrrd Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå