Avatar billede tax Nybegynder
21. november 2004 - 13:32 Der er 6 kommentarer og
1 løsning

Bitwise operations på 24+ bit

Jeg er ved at optimere en AI algoritme, hvori jeg udfolder situationer indtil at jeg finder en løsning.

Situationen består af 4 brikker der er placeret på et board med 64 felter.

Jeg vil derfor gerne beskrive min situation på så lidt plads som muligt, og derfor vil jeg bruge 6 bit til hver brik. (4*6bit=24bit=3bytes)

Problemet er blot hvorledes opererer jeg lettest med dette.

Jeg havde forestillet mig at situationen skulle være:

char sit[3];

Men jeg kan ikke operere bitvist på alle 24 bits på engang. Ihvertfald ikke så længe situationen er baseret på chars.

Hvad gør en klog?!?

Skal jeg bruge en anden datatype?!?
Avatar billede arne_v Ekspert
21. november 2004 - 14:00 #1
Så vidt jeg kan se så er dine muligheder:

1)  array af char og funktioner til at håndtere bit manipulationen

2)  vælge en 32 bit integer og leve med at spilde en byte

3)  en packed bit struct
Avatar billede arne_v Ekspert
21. november 2004 - 14:06 #2
Desværre er angivelse af at en struct skal være packed ikke standard.

I GCC kan man skrive:

struct bf
{
  __attribute__((packed))unsigned char b1 : 6;
  __attribute__((packed))unsigned char b2 : 6;
  __attribute__((packed))unsigned char b3 : 6;
  __attribute__((packed))unsigned char b4 : 6;
};
Avatar billede arne_v Ekspert
21. november 2004 - 14:19 #3
Hm. Det er vist værre endnu. Mange compilere kan vist slet ikke pakke
bit felter på den måde.
Avatar billede tax Nybegynder
21. november 2004 - 15:48 #4
Jeg kunne bruge en unsigned int(32 bit) og gemme den i et array af 3 chars ved memcpy kald?
Avatar billede arne_v Ekspert
21. november 2004 - 15:55 #5
Det kunne du også.
Avatar billede tax Nybegynder
21. november 2004 - 16:01 #6
Tak for hjælpen.
Avatar billede arne_v Ekspert
12. december 2004 - 20:13 #7
OK ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester