Forum: Mikrocontroller und Digitale Elektronik Gerade Potenzen als Größe


von Ebert (Gast)


Lesenswert?

Moin

Wie der Titel schon sagt geht es darum:
In einem Projektbeispiel wird man darauf hingewiesen als Größenangabe 
für ein Array, welches im "idata"-Bereich des Speichers liegt, nur 2er 
Potenzen zu verwenden, also:
2,4,8,16,32 u.s.w.

Wieso kann ich nicht einfach irgendeine Größe wie 1 oder 3 nehmen?

von Route_66 H. (route_66)


Lesenswert?

Hallo!
Das könnte an dem von Dir geheim gehaltenen Prozessor liegen. Der 
adressiert vermutlich Wort-weise. Auch Datentyp ist ein Anhaltspunkt 
(int sind bekanntlich meist 16 Bit).

von Ebert (Gast)


Lesenswert?

Prozessor: Infineon-C515C
Array: vom Typ "int" --> Aber Größenangabe muss einer Zweierpotenz sein, 
wieso? (Es kann 2, 4, 8, u.s.w. sein)
Wieso geht nicht einfach 3 oder 7?

von Udo S. (urschmitt)


Lesenswert?

Ebert schrieb:
> Array: vom Typ "int" --> Aber Größenangabe muss einer Zweierpotenz sein,
> wieso? (Es kann 2, 4, 8, u.s.w. sein)
> Wieso geht nicht einfach 3 oder 7?

Die Lösung zu der Frage liegt in dem Teil der Beschreibung und weiteren 
Informationen, die du uns nicht mitteilst.
Siehe Netiquette

von anderes ich (Gast)


Lesenswert?

Compiler?

von lowlevel (Gast)


Lesenswert?

Sicher das nur Potenzen gehen und nicht auch vielfache von 2 also:

2, 4, 6, 8, 10, usw.?

von Ebert (Gast)


Lesenswert?

Ja es gehen nur Zweierpotenzen: 2, 4, 8, 16, 32, ...
Es ist ein C51-Compiler von Keil

von Davis (Gast)


Lesenswert?

Ebert schrieb:
> Prozessor: Infineon-C515C
> Array: vom Typ "int" --> Aber Größenangabe muss einer Zweierpotenz sein,
> wieso? (Es kann 2, 4, 8, u.s.w. sein)
> Wieso geht nicht einfach 3 oder 7?

Der Grund der Einschränkung liegt bestimmt nicht beim Prozessor. Wer 
oder was soll mich daran hindern, ein Array mit 7 Elementen zu 
deklarieren/definieren?

von anderes ich (Gast)


Lesenswert?

Und woher stammt diese Behauptung?

von Uwe (Gast)


Lesenswert?

>In einem Projektbeispiel wird man darauf hingewiesen als Größenangabe
>für ein Array, welches im "idata"-Bereich des Speichers liegt, nur 2er
>Potenzen zu verwenden
> Wieso kann ich nicht einfach irgendeine Größe wie 1 oder 3 nehmen?

Meine Glaskugel sagt : Weil es so programmiert ist und nicht anders, 
sonst würde es auch gehen !

von Ebert (Gast)


Lesenswert?

Also im Beispielprojekt steht, das man eine Zweierpotenz nehmen "muss". 
Ich unterstreiche "muss" :). Da ich den Grund dafür nicht kenne frage 
ich euch Experten.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Es ist oft sinvoll, dafür zu sorgen, dass die Größe der Elemente von
Arrays Zweierpotenzen sind, weil dadurch bei Array-Zugriffen aufwendige
Multiplikationen entfallen. Das ist aber kein Muss, sondern dient nur
der Optimierung des Programms. Die Array-Größe an sich sollte eigentlich
egal sein.

Ebert schrieb:
> Ja es gehen nur Zweierpotenzen: 2, 4, 8, 16, 32, ...
> Es ist ein C51-Compiler von Keil

Was spricht der Compiler, wenn du frecherweise trotzdem eine Größe von
bspw. 7 nimmst, also
1
int array[7];
?

von Matthias L. (Gast)


Lesenswert?

> Array: vom Typ "int" --> Aber Größenangabe muss einer Zweierpotenz sein,
> wieso? (Es kann 2, 4, 8, u.s.w. sein)
> Wieso geht nicht einfach 3 oder 7?


Das ist keine zwingende VOrgabe. Wenn du Array mit Grössen von 
Zweierpotenzen hast, dann ist es einfacher, eine Bereichsprüfung zu 
machen.

Bsp. Array[0..7] => 8 Elemente
Wenn du das jetzt indizierst mit x, reicht es, wenn x auf die letzten 
drei Bits begrenzt wird:

x = ( x & 7 );

Das kann nie über die Grenzen hinaus.

Hast du eine willkürliche Zahl dagegen, zB Array[0..17], dann musst du 
mit modulo arbeiten:

x = ( x % 17 );

Das braucht, je nach geheimem Prozessor, enorm Resourcen.

von Route_66 H. (route_66)


Lesenswert?

@ lippy: Prozessor ist nicht mehr geheim!
Ebert schrieb:
> Prozessor: Infineon-C515C

von Ebert (Gast)


Lesenswert?

Ja genau. Es ist nicht mehr geheim :). Mich hatte nur der Hinweis "muss" 
verwirrt. Danke für die Antworten

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.