Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Arrays gezielt über Grenzen hinaus beschreiben (https://www.delphipraxis.net/121702-arrays-gezielt-ueber-grenzen-hinaus-beschreiben.html)

Apollonius 2. Okt 2008 21:31

Re: Arrays gezielt über Grenzen hinaus beschreiben
 
@Dax: Mit dem -1 hast du natürlich recht. Aber deine Lösung ist auch etwas komisch:
(1 << (n + 1)) ^ 1 = 10000 ^ 1 = 10001
Eigentlich müsste es also -2 sein, um aus 10000 1110 zu machen.

Dax 2. Okt 2008 21:31

Re: Arrays gezielt über Grenzen hinaus beschreiben
 
Zitat:

Zitat von markusj
Im übrigen müsstest du "einfach" nur hallo[stelle>>3] |= (a << (stelle++)%8) zuweisen, wenn ich dein Problem richtig verstanden habe.
Ersterer Teil greift auf das Element "stelle mod 8" zu, zweiterer schiebt das Bit dann zum Rest.

Das wäre zwar möglich, aber da Divisionen viele Zyklen kosten (und davon ne Menge), wäre dort eher ein & 7 angebracht. Allerdings wird dabei der Speicher auf Bytes heruntergebrochen statt auf machine words, was wieder zu Geschwindigkeitsverluste führt... Der Weg über (unsigned) longs und etwas Vertrauen in die CF-Unit des Compilers dürften da schon mehr wirken:)

Dax 2. Okt 2008 21:32

Re: Arrays gezielt über Grenzen hinaus beschreiben
 
Zitat:

Zitat von Apollonius
@Dax: Mit dem -1 hast du natürlich recht. Aber deine Lösung ist auch etwas komisch:
(1 << (n + 1)) ^ 1 = 10000 ^ 1 = 10001
Eigentlich müsste es also -2 sein, um aus 10000 1110 zu machen.

Oha, ups, Tatsache *g* Dann hattest du natürlich Recht, und ich hab ein -1 unter den Tisch fallen lassen. Entschuldige ;)

markusj 2. Okt 2008 21:55

Re: Arrays gezielt über Grenzen hinaus beschreiben
 
Zitat:

Zitat von Dax
Zitat:

Zitat von markusj
Im übrigen müsstest du "einfach" nur hallo[stelle>>3] |= (a << (stelle++)%8) zuweisen, wenn ich dein Problem richtig verstanden habe.
Ersterer Teil greift auf das Element "stelle mod 8" zu, zweiterer schiebt das Bit dann zum Rest.

Das wäre zwar möglich, aber da Divisionen viele Zyklen kosten (und davon ne Menge), wäre dort eher ein & 7 angebracht. Allerdings wird dabei der Speicher auf Bytes heruntergebrochen statt auf machine words, was wieder zu Geschwindigkeitsverluste führt... Der Weg über (unsigned) longs und etwas Vertrauen in die CF-Unit des Compilers dürften da schon mehr wirken:)

Ich programmiere C nur auf Atmel AVRs, daher die Denkweise ... bei nem 8-Bit RISC ist ein Byte das machine word ;)

mfG
Markus

Elko 2. Okt 2008 22:16

Re: Arrays gezielt über Grenzen hinaus beschreiben
 
Suuuuper! Danke an euch alle!!!
Jetzt funzts :thumb:
@markusj: Ich hab erstmal ne Weile rumgerätselt, was du geschrieben hast, aber letztendlich ists ja mal wirklich ne super einfache Lösung, ohne dass ich andere Datentypen benutzen muss :spin2: DANKE!

@Dax: Stimmt, das mit dem &7 ist sozusagen noch das i-Tüpfelchen für die Lösung :-D

Also hier nochmal der "fertige" Code, falls jemand in 20 Jahren das gleiche braucht :zwinker:
Code:
unsigned char hallo[8],i,stelle=0,a=0;
for(i=0;i<8;i++)hallo[i]=0;
for(i=0;i<64;i++){
  hallo[stelle>>3] |= (a << ((stelle++)&7));
  a=1;
}
Gute Nacht allerseits! :dp:
Elko


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz