Befehl in C (Bitmanipulation)

Gast #4884517
Lesenswert?
• ▲
▼
Hallo,

da wir den Datentyp von adr nicht kennen, ist es auch möglich ein 
anderes Ergebnis zu erhalten !

Genau dann wenn - habe ich lange nicht mehr geschrieben -, wenn adr von 
Typ uint8_t ist =0, oder mit dem Datentyp int8_t =1 .
Gast #4884559
Lesenswert?
• ▲
▼
Rufus Τ. F. schrieb:
> Karl M. schrieb:
>> da wir den Datentyp von adr nicht kennen, ist es auch möglich ein
>> anderes Ergebnis zu erhalten !
>
> Nö. Das Ergebnis kann nur 0 oder 1 sein, völlig unabhängig vom Datentyp
> von "adr".

Schon richtig, aber es darf debattiert werden, unter welchen Bedingungen 
abhängig von adr das Ergebnis 0 oder 1 ist! Sieh Dir z.B. die folgenden 
Fälle an:

char adr = 0xff;  // DEECON = 0
short adr = 0xff;  // DEECON = 0
short adr = 0xff00; // DEECON = 1

Da ein Byte immer 8 bit ist und somit eine right shift um 8 IMMER alle 
bits eines Bytes unter den Tisch fallen lässt (mal angenommen die Shift 
Operation ist kein rotate, in welchem Fall noch Fallunterscheidungen 
zwischen signed und unsigned gemacht werden müssen), können wir davon 
ausgehen, dass adr mindestens 16 bit breit ist, sonst wäre die fn ein 
immer konstant 0.
Gast #4884770
Lesenswert?
• ▲
▼
Die Anweisung macht nur dann Sinn, wenn adr wenigstens 16 Bit hat.
Andernfalls ist das Ergebnis vorhersehbar 0.

Übliche Compiler machen das folgende:
                      aaaaaaaa????????
1. >>8                00000000aaaaaaaa
2. & 0000000000000001 000000000000000a
3. (unsigned char)    0000000a
#4884796
Lesenswert?
• ▲
▼
Amateur schrieb:
> Übliche Compiler machen das folgende:
>                       aaaaaaaa????????
> 1. >>8                00000000aaaaaaaa
> 2. & 0000000000000001 000000000000000a
> 3. (unsigned char)    0000000a

Wenn man hexadezimale Darstellung gewöhnt ist, kann man das überhaupt 
nicht vernünftig lesen.

Bitte nicht a..f für ein einzelnes Bit verwenden, ich bekomme davon 
Kopfschmerzen... ;-)
Gast #4884846
Lesenswert?
• ▲
▼
@ Mikro 76,9

Der TO nannte die Ausgangsvariable "adr".

Dumm wie ich nun mal bin, habe ich eine Zahl ohne Vorzeichen 
vorausgesetzt...

Im Übrigen funktioniert Dein Bleistift nur bei Zahlen oberhalb 127.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.