Laden...

unsigned?

Erstellt von kati82 vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.813 Views
K
kati82 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren
unsigned?

Hallo mal wieder,

habe mal eine Frage zum "unsigned int". Ich habe in einem C-Programm folgendes entdeckt.

unsigned variable : 5;

Damit soll die int-variable eine Größe von 5 Bit haben. Geht sowas auch unter C#? Das mit "uint" ist mir schon klar. Ich weiß nur nicht, wie das mit der Größe funktioniert.
Sowas könnte ich nämlich für mein Programm gut gebrauchen.

6.862 Beiträge seit 2003
vor 17 Jahren

Nein, Bitfelder werden in der Form nicht unterstützt.

Baka wa shinanakya naoranai.

Mein XING Profil.

4.221 Beiträge seit 2005
vor 17 Jahren

Wie wäre es mit byte ? sind zwar 8 - Bit aber immerhin kleiner als uint

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

B
1.529 Beiträge seit 2006
vor 17 Jahren

Und wenn es wirklich so extrem wichtig ist das der Wert nicht größer als 5 Bit wird: schreib dir einen eigenes Struct mit Getter und Setter sowie implizite Konverter.

S
8.746 Beiträge seit 2005
vor 17 Jahren

Die kleinste manipulierbare Einheit in .NET ist das Byte. Alles andere ist nur Schein.

871 Beiträge seit 2005
vor 17 Jahren

Original von kati82
Sowas könnte ich nämlich für mein Programm gut gebrauchen.

Hallo kati82,

Ich bin mir ziemlich sicher, dass man in der "normalen" Programmierung keine Bitfelder mehr benötigt. Aktuelle Systeme haben genügend Speicher damit man solche Artefakte aus vergangenen Zeiten meist nicht mehr braucht. Allenfalls in der embedded Welt gibt es dafür noch einen Verwendungszweck (und da auch nur auf Systemen die **wirklich ** wenig speicher haben)

Grüsse, Egon

K
kati82 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

hallo,

danke für eure Hilfe. Das meiste, was mit einem Byte zu machen geht, habe ich jetzt auch damit gemacht. Es war nur mal so ne rein theoretische Frage.

Muss momentan bei meinem PDA-Programm aufpassen, dass ich nicht zuviel Speicher verwende. Zur Zeit geht es noch. Aber ich muss noch viele, viele Daten auswerten. Einige der Ergebnisse muss ich mir irgendwie während des Programms merken. Deswegen wollte ich den Speicherbedarf etwas minimieren. Aber der Unterschied zwischen 5 Bit und 8 Bit ist ja nicht all zu groß.

Ciao, kati82

T
512 Beiträge seit 2006
vor 17 Jahren

Also für Bitfelder gibt es das BitArray. Dort kann man komfortabel einzelne Bits setzen und abfragen, und das ganze auf beliebiger Größe.

Das mit den 5 Bit wundert mich in C aber doch sehr. Man könnte sich ja einreden, dass man damit den Wertebereich festlegen kann, aber C ist ja nicht sonderlich typsicher.
Denn C rundet garantiert auch auf Byte. Das geht einfach nicht anders. Eventuell gewinnt man etwas, wenn man viele solcher Variablen in eine Struktur packt. Aber das bezweifle ich auch. Standardeinstellung ist ja sogar Runden auf 32 Bit, und unter 8 Bit kann man das auch nicht stellen.
Auf der Assembler Ebene kann man mit den meisten, um nicht zu sagen allen gängigen, CPUs nicht unter Byteebene arbeiten. Ich hab mal mit ner Architektur gespielt, da konnte man einzelne Bits mit einem Befehl setzen oder Laden. Aber auch dort war die kleinste Verarbeitungseinheit ein Byte.

e.f.q.

Aus Falschem folgt Beliebiges

6.862 Beiträge seit 2003
vor 17 Jahren

Für den Pc als Plattform machen Bitfelder in der Tat wenig Sinn, aber für mobile Geräte und auch µC brauch man sowas öfter.

Da werden dann z.b. Statuswerte in größeren Datentypen zusammengefasst. Du hast z.b. 4 Statuswerte: der eine 5 Bit, der nächste 12 Bit, dann noch einer 9 Bit + 6 Bit. Wenn man das Alignment selber in die Hand nimmt, bekommt man alle 4 Werte in einen Integer und über die Bitfelder in Strukts kann man die dann auch einzeln ansprechen ohne irgendwelche Bitmasken setzen zu müssen. Man hat dann z.b.nen 32 Bit Struct Stati wo man dann leicht über Stati.Status1 = ... usw. drauf zugreifen kann, wobei Status 1 dann wirklich nur die 5 Bit sind und nicht nen Byte wo man was wegmaskiert.

Wie gesagt, bei µC brauch man sowas öfter, sobald aber bissle Speicher da ist, macht sowas den Code nur plattformabhängig und umständlich.

Baka wa shinanakya naoranai.

Mein XING Profil.

S
8.746 Beiträge seit 2005
vor 17 Jahren

Original von kati82
Deswegen wollte ich den Speicherbedarf etwas minimieren.

Wie schon gesagt, da hast du keine Chance. Die einzige Stelle, an der man tatsächlich am Speicherbedarf was drehen kann, ist bei Strukturen. Hier kann man allein durch die Anordnung der Elemente ggf. ein paar Bytes sparen. Ursache ist auch hier das sogenannte Byte-Alignment.