webForumDet fria alternativet

Dela på en integer

7 svar · 174 visningar · startad av Viktor

ViktorMedlem sedan aug. 20021 752 inlägg
#1

Hej hopp, här kommer en fråga :)

Jag skulle vilja dela på en 32 bits integer så att jag kan sätta de 16 övre till ett tal och sedan de 16 undre till ett annat tal och sedan kunna läsa av dessa tal på något lätt och smidigt sätt, någon som vet hur jag ska göra? Jag "tror" att jag måste skifta (>> eller <<) men jag vet inte hur jag ska göra det.

/Viktor

Marcus EMedlem sedan maj 20021 466 inlägg
#2

Använder du Windows finns det två makron för detta i windef.h:
#define LOWORD(l) ((WORD)((DWORD_PTR)(l) & 0xffff))
#define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16))

ViktorMedlem sedan aug. 20021 752 inlägg
#3

Använder inte Widows, är det bara att kopiera in dessa macros ändå?

/Viktor

BeatboxMedlem sedan okt. 20013 217 inlägg
#4

I praktiken så är det ju en skiftning...

ViktorMedlem sedan aug. 20021 752 inlägg
#5

Beatbox skrev:

I praktiken så är det ju en skiftning...

Visst är det det men det gäller för en nybörjare att bli skickad i rätt riktning :)

Såhär blev det tillslut :)

#define LOWORD(I) (I & 0xFFFF)
#define HIWORD(I) (I >> 16)
#define MAKELONG(a, b) ((a & 0xFFFF) | ((b & 0xFFFF) << 16))

int i(MAKELONG(18,16));

cout << LOWORD(i) << endl << HIWORD(i) << endl;

bara omskrivningar av Windef funktionerna.

Tack för hjälpen :)

/Viktor

Sang-draxMedlem sedan juli 2002581 inlägg
#6

Om du nu ska använda makron (vilket du absolut inte ska) du skriv iallafall så här:

#define LOWORD(I) ((I) & 0xFFFF)
#define HIWORD(I) ((I) >> 16)

Fast gör så här i stället: (bättre på alla sätt)

inline int loword(int i)
{
  return i bitand 0xffff;
}
inline int hiword(int i)
{
  return i >> 16;
}
ViktorMedlem sedan aug. 20021 752 inlägg
#7

Då kommer en följd fråga :)
I vilken klass ska jag lägga dem? De behövs av flera delar (klasser) i programmet.
Nu har jag lagt macron i en include fil som inkluderas av alla delar av programmet.
Är det "ok" att ha samma funktion på flera ställen i progammet?

/Viktor

Sang-draxMedlem sedan juli 2002581 inlägg
#8

Viktor skrev:

Är det "ok" att ha samma funktion på flera ställen i progammet?

Ja, om den är markerad som "inline".

130 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)