bit7 bis bit0 einer uint8_t lesen

Gast #285538
Lesenswert?

ich möchte prüfen ob das jeweilige bit gesetzt ist von einem byte,
angefangen von bit7 des bytes bis bit0.
wenn es jeweils gesetzt ist, soll bei true was ausgeführt werden und
bei false.

neuer
#285543
Lesenswert?

learning by doing ist super.
Nur funktioniert es bei so manchen Grundlagen
nicht richtig. >>, &, && und das Verhalten von
for-Schleifen sind in jedem C-Buch beschrieben.
Erst mal eine 1/2 Stunde lesen, dann das 'doing'
anwerfen.

Wie Dir so mancher Profi bestaetigen wird: Ab
und an mal mit einem printf (oder Äquivalent)
interessante Zwischenergebnisse im laufenden
Programm anschauen, schafft schnell Klarheit.
Das ist dann tatsächlich 'learning by doing'.
Gast #285544
Lesenswert?

@Peter

>was hast du gegen learning by doing ?
Garnichts, habe ich auch gemacht.

>Keiner wird als C-Profi geboren.
Das stimmt. Ich denke mal es gibt gar keinen 'echten' Profi.

Mag sein das ich etwas voreilig geantwortet habe.

Aber nach einem langen read-only in diesem Forum kann ich Jörg's
manchmal sehr kritische Äußerungen verstehen. Irgendwann fällt der
Tropfen in das volle Fass und es läuft dann einfach über.

Wenn 'neuer' nicht sofort der magische Wert 0x80 in's Auge springt
dann weiß ich auch nicht mehr weiter. Vielleicht sollte er sich zuerst
einige Grundlagen aneignen. Ich meine wie funktionieren shift
operationen >> und so weiter.

Torsten
#285545
Lesenswert?

@all:
ich finde es eine legitime Frage. Mir ist learning by doing viel lieber
als learning by copying ...

@neuer:
mal Dir einfach mal auf, welche Werte mask in den einzelnen
Schleifendurchläufen hat, dann verstehst Du sicher bald, was passiert:

1: 0x80  10000000binär
2: 0x40  01000000b
3: 0x20  00100000b
4: ...

Gruß, Stefan
Gast #285546
Lesenswert?

"T.S."

reg dich nicht auf.
ich ärgere mich nicht darüber was du geschrieben hast, finde ich aber
nicht toll.
du bist noch jung, kümmere dich mal um die dinge die dein leben noch
stark beeinflussen werden. ich brauche das nicht mehr weil ich mich als
junger pensionär wohlfühle und von diene steuern lebe.
#285550
Lesenswert?

Bei C kann man sehr faul sein ...

statt               mask != 0
kann man einfach    mask
schreiben.
Der Ausdruck ist immer dann TRUE, wenn mask ungleich NULL ist.

Deswegen läuft die for-Schleife, bis das Einser-Bit unten rausgeschoben
wird und mask damit NULL ist.

Gruß, Stefan
Gast #285551
Lesenswert?

Das mit dem "Der Ausdruck ist immer dann TRUE, wenn mask ungleich NULL
ist." kann für Anfänger ganz schön zur Falle werden falls einige
Randbedingungen nicht beachtet werden.

Und zwar: die "schönen" Macros TRUE und FALSE

Da wird definiert
1
#define TRUE 1
2
#define FALSE 0

und dann verwendet.
1
char function(char irgendwas)
2
{
3
   ...tue irgendwas mit irgendwas 
4
   return (irgendwas & 0x30);
5
}
6
...
7
int main(void)
8
{
9
   ...
10
   if(function(12) == TRUE)
11
...
12
}
und wundern sich warum das nicht funktionert.

Ein grundlegender Tipp: NIE mit "== TRUE" vergleichen,
vergleiche immer mit "!= FALSE".
}
Gast #285552
Lesenswert?

"Bei C kann man sehr faul sein ..."

ich habe gehört und versuche es einzuhalten, in "c" diszipliniert zu
proggen als anfänger.

warum fängt man in c wieder als fachmann...an zu schlabbern.
ist das insider-c.

neuer
Moderator Persönliche Seite #285553
Lesenswert?

> Ein grundlegender Tipp: NIE mit "== TRUE" vergleichen,
> vergleiche immer mit "!= FALSE".

Stattdessen lieber gleich richtige Vergleiche vornehmen.

Wenn der zu testende Wert ein boolean ist (d.h. das Ergebnis
einer boolschen Operation wie == != && ||, oder aber im
Programm nur mit TRUE und FALSE bzw. true und false erzeugt
worden ist), dann einfach direkt für den Test benutzen:

wert = a != b;  /* als Beispiel */

if (wert) tu_was;

Was soll an

if (wert != FALSE) tu_was;

besser sein?  Wenn der Test nicht in wert zwischengespeichert
worden wäre, würde man doch auch schreiben

if (a != b) tu_was;

und nicht

if ((a != b) != FALSE) tu_was;

Andererseits sollte man numerische Werte ,,der Schönheit
halber'' besser gegen numerische Werte vergleichen.  Das
Ergebnis bleibt das selbe, aber dem geneigten Leser wird
dann sofort klar, dass es sich um einen numerischen
Vergleich handelt:

for (mask = 0x80; mask != 0; mask >>= 1) tu_was;
#285554
Lesenswert?

Wer hat denn überhaupt was von Macros gesagt? TRUE und FALSE ist für
mich einfach der Wertebereich boolscher Ausdrücke.

Und die Aussage
if 17 == TRUE
klingt doch ziemlich merkwürdig, oder? Das könnte man allerhöchstens
mit 42 so stehen lassen ;-)

Viele Grüße, Stefan

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