Forum: Mikrocontroller und Digitale Elektronik Bit in einem Int16 abfragen


von Oz z. (ozzy)


Lesenswert?

Hi,

für eine Gleitkommadarstellung habe ich ein 16-Bit Wert (32 war mir zu 
lang). diesen möchte ich jetzt für arithmetische Funktionen zerlegen. 
Meine Frage ist nun, ob dies einfacher geht, als zu schauen, ob z.B. das 
erste Bit gesetzt ist, indem man guckt, ob die Zahl kleiner ist als 
32768.

Bzw. kann man vielleicht sogar bits "rauskopieren"? Also Stellen z.B. 
1-8 in einen 8bit-int reinschreiben???

Vielen Dank schon einmal im Voraus, Ozzy

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ist in C einfach:


uint16_t wert;
uint8_t einbyte;

if (wert & (1 << 15))
  puts("Bit 15 gesetzt\n");

if (wert & (1 << 13))
  puts("Bit 13 gesetzt\");

einbyte = wert & 0xFF;

von Oz z. (ozzy)


Lesenswert?

Hi,

vielen Dank für Deine Antwort! Kannst Du mir auch sagen, wie ich solche 
Werte shiften kann? Also z.B. 3x nach rechts? Und das eleganter als 3x 
durch 2 zu teilen???

MfG, Ozzy

von Karl H. (kbuchegg)


Lesenswert?

Christoph O. wrote:
> Hi,
>
> vielen Dank für Deine Antwort! Kannst Du mir auch sagen, wie ich solche
> Werte shiften kann? Also z.B. 3x nach rechts? Und das eleganter als 3x
> durch 2 zu teilen???

Ist das eine Fangfrage?

wenn << shiften nach links bedeutet, was wird dann wohl das
Zeichen für 'Shiften nach rechts' sein?

Genau: >>

von Oz z. (ozzy)


Lesenswert?

Hi,

nein, das sollte keine Fangfrage sein. Ist das dann einfach (wert<<3) 
ist linksshift um 3?

MfG, Ozzy

von ... (Gast)


Lesenswert?

@Christoph

Das solltest du dir mal anschauen:

http://www.amazon.de/f%C3%BCr-Dummies-So-lernen-Sie-hohe/dp/3826629434

von Emanuel (Gast)


Lesenswert?

mach ne struktur, wo du zusätzlich zum wort, die einzelnen bits nochmals 
separat als variablen definierst, ist das einfachste und schnellste wenn 
dus oft brauchst...

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.