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