Hallo ich habe folgendes Problem ich soll einen 16 bit Wert in einer 2 mal 4 matrix ablegen. Jeweils 2 bit sollen eine Stelle in der Matrix entsprechen. Kann mir irgend jemand sagen wie das geht?
kannst du dein bisheriges Programm schon mal zeigen? Denn deine Anfrage ist nicht eindeutig.
Hallo ich hab mir das so voegestellt:
struct a{int zahl:2,};
struct b{a senkrecht[2]};
struct c{b waagrecht[4]};
Nur wie bekomme ich meinen 16 bit Wert am besten hier rein?
Möchte es ohne Maskieren machen wenn das geht? hat einer eine Idee
hierzu?
C_Anfänger schrieb: > struct a{int zahl:2,}; > struct b{a senkrecht[2]}; > struct c{b waagrecht[4]}; Das funktioniert so aber nicht, weil ein struct immer "aufgerundet" wird. Wie genau haengt von der verwendeten Prozesso-Architektur ab. So wird oft auf ganze 32 bit Worte aufgerundet. Testweise koennte man sich zum Beispiel mal sizeof(a), sizeof(b) und sizeof(c) ausgeben lassen. Normalerweise implementiert man so etwas mit Zugriffsfunktionen, die das entsprechende maskieren uebernehmen.
Erklär doch mal was genauer du vorhast, ich verstehe die Frage nicht (und kann deshalb auch nicht helfen). Beispiel?
C_Anfänger schrieb: > hallo und wie würde das ganze dann aussehen? Mal sehen:
1 | #include <stdint.h> |
2 | |
3 | static uint16 val; |
4 | |
5 | uint16_t GetElement(unsigned int x, unsigned int y) |
6 | {
|
7 | return (val >> (x * 4 + y) * 2) & 3; |
8 | }
|
9 | |
10 | void SetElement(unsigned int x, unsigned int y, uint16_t n) |
11 | {
|
12 | unsigned int shift = (x * 4 + y) * 2; |
13 | uint16_t mask = 3 << shift; |
14 | val = (val & ~mask) | ((n & 3) << shift); |
15 | }
|
Irgendwie so müsste es gehen, wenn ich richtig verstanden habe was Du machen möchtest.
ALso die Aufgabenstellung ist so mein 16 bit Wert soll angeben welche Elemente in einer Matrix mit 0 , 1 oder -1 gefüllt sind. 00 = 0 01 = 1 10 = -1 11 ungültig matrix c[2][4] So wenn jetzt mein unit16 Wert so aussehen würde 1001000010100001 Müste ich die Daten wie folgt in der Matrix ablegen. c[0][0] =10 c[0][1] =01 c[0][2] =00 c[0][3] =00 c[1][0] =10 c[1][1] =10 c[1][2] =00 c[1][3] =01 hierraus würde ich dann bestimmen ob es 0 ,1 oder -1 ist.
C_Anfänger schrieb: > ALso die Aufgabenstellung Hausaufgaben? Hier gibts Hilfe aber keinen fertigen Code (wollte ich nur mal erwähnt haben.) ist so mein 16 bit Wert soll angeben welche > Elemente in einer Matrix mit 0 , 1 oder -1 gefüllt sind. > 00 = 0 > 01 = 1 > 10 = -1 > 11 ungültig > matrix c[2][4] > So wenn jetzt mein unit16 Wert so aussehen würde 1001000010100001 > Müste ich die Daten wie folgt in der Matrix ablegen. > c[0][0] =10 > c[0][1] =01 > c[0][2] =00 > c[0][3] =00 > c[1][0] =10 > c[1][1] =10 > c[1][2] =00 > c[1][3] =01 > hierraus würde ich dann bestimmen ob es 0 ,1 oder -1 ist. Denk dir doch erstmal eine eindimensionale Matrix und packe die Elemente gedanklich hintereinander:
1 | c[0] c[1] c[2] c[3] |
2 | 00 01 10 01 |
Vergleiche mit deinem uint16_t-Wert: 00011001. Fällt dir was auf? Einfache Bitschieberei. 2-dimensional wird es etwas komplizierter aber das Prinzip bleibt gleich. Mache es wie Kai S., eine Funktion GetElement und eine Funktion SetElement.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.