Toon posts:

[java] 2 shorts in een int stoppen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil 2 (16-bit) shorts in een (32-bit) integer
stoppen, zodanig dat de eerste short in de lo-bits van
de integer en de tweede short in de hi-bits komt.

Wie o wie weet hoe dit moet

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Stop de tweede short (die in de hi-bits komt) in een int. Doe genoeg bit-shift's naar links (<< dacht ik) en tel dan de tweede erbij op.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:35

.oisyn

Moderator Devschuur®

Demotivational Speaker

int i = lo | ((int)hi << 16);

lo komt in de onderste 16 bits (dus blijft onveranderd), en hi komt in de bovenste 16 bits, dus die moet je eerst 16 bits naar links schuiven (wel even casten naar int, anders schuift ie 16 bits naar links in een 16 bits short, dus blijft er niets over :))

Dan voeg je de bits van lo en de aangepaste hi samen

.edit: mijn antwoord is lekker mooier :P

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
.oisyn
Och, zooooveel mooier nou ook weer niet. Eigenlijk vindt ik hem een stuk onleesbaarder >:)
en int's i noemen is alleen lief bij loops >:)

Verwijderd

Topicstarter
Thanks; we zullen het even proberen.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:35

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op dinsdag 21 mei 2002 22:15 schreef Glimi het volgende:
en int's i noemen is alleen lief bij loops >:)
okee jij je zin

int resultaatVanTweeShortsInEenInt = ondersteZestienBits | ((int)bovensteZestienBits << 16);

:+
Op dinsdag 21 mei 2002 22:18 schreef nronaldvdberg het volgende:
Thanks; we zullen het even proberen.
En welk antwoord vond je het mooist? Die van Glimi of die van mij? :P

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Op dinsdag 21 mei 2002 22:19 schreef .oisyn het volgende:
okee jij je zin
code:
1
int resultaatVanTweeShortsInEenInt = ondersteZestienBits | ((int)bovensteZestienBits << 16); // 16 bits naar links omdat een short 16 bits is. Zo komt hij in het 'bovenste deel' van de int

:+
Zo :+

[/zeikmodus]

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:35

.oisyn

Moderator Devschuur®

Demotivational Speaker

comments zijn voor mietjes :7

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Op dinsdag 21 mei 2002 22:23 schreef .oisyn het volgende:
comments zijn voor mietjes :7
Och het ligt er maar aan hoe je het ziet. Als het maar voor jezelf later een beetje gedocumenteerd is. Maar jij bedoelt waarschijnlijk : "If it was hard to write, then it should be hard to understand"

Nou hier de oplossing voor je:
http://www.h.shuttle.de/mitch/stuff/kenny.html
of write je comment in het 1337 h4X0rz oid :+

Verwijderd

Topicstarter
Op dinsdag 21 mei 2002 22:19 schreef .oisyn het volgende:

En welk antwoord vond je het mooist? Die van Glimi of die van mij? :P
Die van jou (no offence glimi ;) )

En hoe delen we dit op een elegante wijze weer op in 2
shorts?
Wij hebben bedacht:
code:
1
2
hi = (short) a[i] >> 16;
lo = (short) (a[i] << 16) >> 16;

Gaat dit lukken? En belangrijker nog: kan het eleganter?

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Op dinsdag 21 mei 2002 22:30 schreef nronaldvdberg het volgende:

[..]

Die van jou (no offence glimi ;) )
:+ Ik zal je nog us helpen :D

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:35

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op dinsdag 21 mei 2002 22:30 schreef nronaldvdberg het volgende:

[..]

Die van jou (no offence glimi ;) )
hah eat your heart out, Glimi! >:) ;)
En hoe delen we dit op een elegante wijze weer op in 2
shorts?
Wij hebben bedacht:
code:
1
2
hi = (short) a[i] >> 16;
lo = (short) (a[i] << 16) >> 16;

Gaat dit lukken? En belangrijker nog: kan het eleganter?
Bijna goed.
Die eerste, hi dus, daar moet je de cast naar short pas als laatst doen. Als je m eerst cast, dan maakt ie van de 32 bits dus 16 bits, en dan gaan de bovenste 16 bits verloren (en dat zijn nou juist die bits die je moet hebben). Dus eerst shiften naar rechts, en dan casten naar short:
code:
1
hi = (short)(a[i] >> 16);

Dat gezegd, is het natuurlijk gelijk duidelijk hoe je de onderste 16 bits moet krijgen: door simpelweg de bovenste 16 bits weg te laten. Maw, gewoon casten naar short :) :
code:
1
lo = (short)a[i];

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1