Betrag eines Integers mit & Operator



  • Hallo, ich möchte den mathematischen Betrag eines Integers "berechnen", also das Vorzeichen zum Plus machen. Ich dachte mir, das müsste so gehen:

    short zahl = -790;
    short betrag = 0x7FFF & zahl;
    

    Die Idee ist halt, dass ich mit 0x7FFFF eine Zahl habe, bei der alle Bits 1 sind, ausser das Vorzeichen. Wenn ich jetzt eine beliebige Zahl mit logischem UND kombiniere, werden alle Bits vom Original übernommen, nur nicht das Vorzeichen. Leider funktioniert es nicht. 😞 betrag hat am Ende den Wert 31978. Warum? 😕


  • Mod

    Und wie kommst du zu der festen Überzeugung, dass das Vorzeichen bloß durch das Setzen eines bestimmten Bits bestimmt wird? Diese Annahme ist nämlich auf den meisten Systemen falsch.
    http://de.wikipedia.org/wiki/Zweierkomplement

    Wenn du dir nun aber eine Strategie ausdenkst wie man im Zweierkomplement clever den Betrag ausrechnen kann, lass dir gesagt sein, dass dies dann auch nicht portabel wäre, weil es durchaus auch Systeme gibt, die das wiederum anders handhaben.

    Wenn es dir aber nicht auf 100% Portabilität zu programmierbaren Kaffeemaschinen und Röhrencomputern ankommt, dann ist diese Seite eine gute Anlaufstelle für kleine Programmiertricks, die auf gängigen Systemen funktionieren. Tatsächlich gibt es dort einen Betrag ohne if:
    http://graphics.stanford.edu/~seander/bithacks.html#IntegerAbs



  • SeppJ schrieb:

    Und wie kommst du zu der festen Überzeugung, dass das Vorzeichen bloß durch das Setzen eines bestimmten Bits bestimmt wird?

    Hmm, keine Ahnung. Wieder was gelernt. 😃

    Danke für deine lehrreiche Antwort!



  • Andere Leute vor vielen Jahren haben es auch für nötig erachtet, diese Funktionalität in den C Standard aufzunehmen, heißt sinnigerweise:

    #include <stdlib.h>
    
    int abs(int x);
    

Anmelden zum Antworten