(wert & 0xff)



  • obscnt wird binär mit FF(hex) = 255(dez) = 1111 1111(binär) verundet.



  • irgendwie vertehe ich den sinn da nicht...

    wenn der wert in:

    zeig->obscnt = 60

    ist und mit:
    & 0xff

    verundet wird, was habe ich dann fuer einen wert ? immer noch 60 ?!

    sorry, finde nix im C Buch....

    mfg Olli.



  • daa531 schrieb:

    irgendwie vertehe ich den sinn da nicht...

    wenn der wert in:

    zeig->obscnt = 60

    ist und mit:
    & 0xff

    verundet wird, was habe ich dann fuer einen wert ? immer noch 60 ?!

    sorry, finde nix im C Buch....

    mfg Olli.

    Warum probierst du es nicht einfach aus?
    Wenn du nur zeig->obscnt & 0xff; machst, passiert natürlich garnix und wenn du das machst:

    zeig->obscnt&=0xff;
    

    dann bleibt der Wert 60 erhalten, weil:
    1111 1111 (0xFF)
    &0011 1100 (60dez)
    ----------
    =0011 1100 (60dez)



  • Angenommen, ein Wert vom Typ integer (4 bytes) wird mit 0xff verunded(also WERT & 0xff), so erreicht man dadurch, das die obersten 3 bytes auf 0 gesetzt werden und das unterste byte in WERT seinen Wert behält.

    Z. B. kannst du schauen, welchen Wert das unterste byte von WERT hat:

    printf("%d", (WERT & 0xff));
    

    binär: 0101 0101 0000 1011 0000 0101 0111 0011
    & 0000 0000 0000 0000 0000 0000 1111 1111

    dann ergibt die Ausgabe den Wert 115

    Hoffe, das das dir beim Verständnis mit Bitoperatoren weiterhilft!
    Falls Fehler drin sind, lasst es mich wissen.

    Tschö



  • Warum probierst du es nicht einfach aus?

    Ja ja habe bissel umgespielt, aber einen unterschied habe ich eben nicht
    feststellen koennen ?!
    ob mit oder ohne "& 0xff", der wert bleibt immer der selbe.
    kann man das noch besser beschreiben ? ich QUAELGEIST....

    mfg Olli.



  • daa531 schrieb:

    Warum probierst du es nicht einfach aus?

    Ja ja habe bissel umgespielt, aber einen unterschied habe ich eben nicht
    feststellen koennen ?!
    ob mit oder ohne "& 0xff", der wert bleibt immer der selbe.
    kann man das noch besser beschreiben ? ich QUAELGEIST....

    mfg Olli.

    In meinem Posting steht doch die Begründung. Weißt du überhaupt wie das binäre AND funktioniert?



  • In meinem Posting steht doch die Begründung. Weißt du überhaupt wie das binäre AND funktioniert?

    wenn ich ehrlich bin, nein :(( Ok ich schaue mir erstmal das binaere AND an!
    Ich hoffe Google findet da was passendes.

    Danke fuer die antworten.

    mfg Olli.



  • Is ganz einfach: AND ergibt nur dann 1, wenn BEIDE an der Operation beteiligten Operanden 1 sind.

    1 & 1 = 1
    1 & 0 = 0
    0 & 1 = 0
    0 & 0 = 0

    Wenn du jetzt 2 komplette Zahlen verunden willst, dann schreibst du einfach die Bits untereinander und verundest stellenweise. Also z.B:
    110101
    101101
    --------
    100101

    Nähere Infos gibts hier:
    http://de.wikipedia.org/wiki/Boolesche_Algebra



  • /bin/bash0R schrieb:

    Angenommen, ein Wert vom Typ integer (4 bytes) wird mit 0xff verunded(also WERT & 0xff), so erreicht man dadurch, das die obersten 3 bytes auf 0 gesetzt werden und das unterste byte in WERT seinen Wert behält.

    Nicht nur das unterste Byte in WERT behält seinen Wert, WERT wird überhaupt nicht verändert. Es wird lediglich ein temporäres Objekt aus der Verknüpfung beider Operanden erzeugt. In dieser Hinsicht arbeiten die bitweisen Operatoren (&,|,^) genau wie die arithmetischen Operatoren (+,-,*,/,%).



  • groovemaster2002 schrieb:

    /bin/bash0R schrieb:

    Angenommen, ein Wert vom Typ integer (4 bytes) wird mit 0xff verunded(also WERT & 0xff), so erreicht man dadurch, das die obersten 3 bytes auf 0 gesetzt werden und das unterste byte in WERT seinen Wert behält.

    Nicht nur das unterste Byte in WERT behält seinen Wert, WERT wird überhaupt nicht verändert. Es wird lediglich ein temporäres Objekt aus der Verknüpfung beider Operanden erzeugt. In dieser Hinsicht arbeiten die bitweisen Operatoren (&,|,^) genau wie die arithmetischen Operatoren (+,-,*,/,%).

    bash0r hat hier natürlich die Auswirkungen auf das Ergebnis erläutert, und da werden nun mal die 3 höherwertigen Bytes auf 0 gesetzt.



  • interpreter schrieb:

    bash0r hat hier natürlich die Auswirkungen auf das Ergebnis erläutert, und da werden nun mal die 3 höherwertigen Bytes auf 0 gesetzt.

    Hatte er aber nicht so konkret geschrieben. Ich wollte nur evtl. Missverständnisse von vornherein klarstellen. Gab ja hier schon Leute, die glauben, dass Nicht-Assignment Operatoren die Operanden ändern.


Anmelden zum Antworten