Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#3

Re: SetBit-Funktion verbessern?

  Alt 10. Jul 2004, 21:16
Delphi-Quellcode:
function BitSet(Value,BitIndex: LongWord; State: Boolean): LondWord;
asm
    shr ecx, 1
    btc eax, edx
end;

procedure BitSet(var Value: LongWord; BitIndex: LongWord; State: Boolean);
asm
    shr ecx, 1
    btc dword ptr [eax], edx
end;
Bit Indizes beginnt man immer von 0 bis X zu zählen, und nicht von 1 bis X.
Die Logik dahinter ist simpel da eine Binäre Zahl sich aus

2^0 + 2^1 + 2^2 + 2^3 + 2^4 + ... + 2^x zusammensetzt.

wie man sieht beginnt der Exponent mit 0 statt mit 1.

Die binäre Zahl 10110101 ist also

Code:
BitIndex= Exponent 76543210
                   10110101 = 1 * 2^7 + 0 * 2^6 + 1 * 2^5 + 1 * 2^4 + 0 * 2^3 + 1 * 2^2 + 0 * 2^2 + 1 * 2^0 =
                            =    128 +       0 +      32 +      16 +       0 +       4 +       0 +       1 =
                            = 181
Wie man sieht ist es essentiel das Bit Indizes mit 0 beginnen, dies schafft den Übergang in der Logik der Rechentechnik in die Logik der Mathematik.

Gruß Hagen
  Mit Zitat antworten Zitat