Gemischte Datentypen

Gast #4988962
Lesenswert?

Georg M. schrieb:
> Aber falls das Resultat die reservierte Bitbreite nicht überschreitet,
> ist dann alles fehlerfrei?

Und wie willst du das prüfen?

Das ganze ist ein Abschneiden relevanter Bits und das sollte man nur 
dann wagen, wenn man mit allerletzter Sicherheit ganz genau weiß, daß da 
NIEMALS was passieren könnte. Sonst hast du nämlich ne Hausnummer 
anstelle einer Differenz und kannst das nichtmal merken.

Was mir da als Beispiel einfällt, sind die (zumindest mir) noch immer 
unverständlichen Verhältnisse bei einem CIC-Dezimator nach Hogenauer: 
zuerst eine oder mehrere Additionsstufen (die überlaufen können und 
dürfen) und dann ebensoviele Differenzierer. Aber OK, zumindest bei 
Xilinx wachsen dafür die Datenbreiten ins Erhebliche an, mehr als 80 Bit 
für die Register mittendrin scheinen keine Seltenheit zu sein.

Und du willst Bits abschneiden...

W.S.
Gast #4988971
Lesenswert?

Georg M. schrieb:
> Aber falls das Resultat die reservierte Bitbreite nicht überschreitet,
> ist dann alles fehlerfrei?

Was ist dann Deine Frage? Und wenn ja, für welche Programmiersprache?

Wenn Dein Ergebnis 0..32767 ist, dann reicht eine 2-Byte Variable (*) 
aus.

Wenn Dein Ergebnis -32768..65535 ist, dann solltes Du Dir frei nach 
Hamlet schon um signed oder nicht seigned gedanken machen.





*)bei aktuellen CPUs mit 2er-Komplement und 8Bit pro Byte etc.
Gast #4989065
Lesenswert?

S. R. schrieb:
> Georg M. schrieb:
>
> Für Division (32 Bit geteilt durch 16 Bit ergibt 16 Bit) ginge das, für
> alle anderen klassischen Operationen (Addition, Subtraktion,
> Multiplikation, beliebige Bitoperationen) nicht.

Nein stimmt nicht eine 32 Bit Zahl/ 1 ist immer noch eine 32 Bit Zahl.
#4989078
Lesenswert?

Wenn Du genau weist in welchem Zahlenbereich das zu speichernde Ergebnis 
liegt, kannst Du die Datentypen kunterbunt mischen.
Da aber vieles im "Hintergrund" passiert, ist so etwas nicht zu 
empfehlen. Vor allem, wenn Du Zahlen mit und ohne Vorzeichen mischt. 128 
wird dann schnell zu -1.

Weißt Du aber genau, welche Ziffern auftreten können, spricht nichts 
dagegen (uint8_t) = (uint32_t) + (uint32_t) durchzuführen.
Sollte aber Deine Annahme nicht zutreffen, gibt es keine Fehlermeldung 
im Falle eines Falles. Also dann ist halt 120 + 136 = 0(!)
Gast #4989101
Lesenswert?

Georg M. schrieb:

> Spricht etwas dagegen, das Ergebnis einer arithmetischen Operation in
> die Variable eines anderen Datentyps zu speichern?

Nein. Jedenfalls nicht, solange sie sicher da rein passen wird...

Allerdings ist die Zahl der Probleme, bei denen das gegeben ist, sicher 
sehr klein im Verhältnis zur Gesamtzahl aller denkbaren Probleme...

Das sollte dich aber nicht ernsthaft entmutigen. Denn selbst, wenn man 
immer Hochsprachen-treudoof beim gewählten Datentyp bleibt, ist dieses 
Verhältnis oft nicht wirklich besser...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren