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

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