LitDev 1.2.24.0 DE
http://litdev.uk/LitDev.De.html Extension API
LDBits
Bitweise Logik zum Speichern binärer Flags als Bits in einer einzelnen -/+ Ganzzahl.
Intern wird dazu eine 32bit -/+ Ganzzahl (Int32, -2147483648 bis 2147483647, -2^31 bis 2^31-1) verwendet.
Index 32 ist Vorzeichenbit (wenn gesetzt -> neg. Ganzzahl als Zweierkomplement).
Vergleichbar mit 32-element. Array aus 1 und 0 Werten, gespeichert als einzelne Zahl.
Die 32 Bits (1 bis 32) werden ab 1 indexiert. Arraywerte (0|1) sind die gesetzten 2er Potenzen von 0 bis 30:
bit1..2^0, bit2..2^1, bit3..2^2, usw.
example http://www.catonmat.net/blog/low-level-bit-hacks-you-absolutely-must-know/
http://graphics.stanford.edu/~seander/bithacks.html
AndBits | GetBit | GetBits |
Not | OrBits | SetBit |
UnsetBit | XOrBits |
AndBits(var1,var2)
Bitweise And (&, Und) Verkettung zweier Zahlen.
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
var1 Die erste Zahl.
var2 Die zweite Zahl.
returns Die And Zahl (Bit gesetzt, wenn beide Eingabebits gesetzt).
example 1100 (12) And
1010 (10) =
1000 (8)
LDBits.AndBits(15, 255) '15
(0F & FF = 0F, 00001111 & 11111111 = 00001111)
'n Geradzahl?
LDBits.AndBits(n,1) '0 gerade, 1 ungerade
GetBit(var,bit)
Ermittelt einen einzelnen Bitwert in einer angegebenen Zahl (s. GetBits für alle).
var Die zu überprüfende Zahl.
bit Der Index für das abzufragende Bit (1 bis 32, für 2er Potenzen 0-31).
returns Der Bitwert:
0 (ungesetzt)
1 (gesetzt)
GetBits(var)
Ermittelt alle Bitwerte einer angegebenen Zahl als Array (s. GetBit für Einzelbit).
Info: Der Arrayindex ist NICHT die 2er Potenz des Bits, diese ist Index-1.
var Die zu überprüfende Zahl.
returns Die einzelnen Bitwerte (0 oder 1) als 32-element. Array (ab 1).
example GetBits(6) ' "1=0;2=1;3=1;4=0;.."
Unteres Halbbyte/Nibble: 0+2^1+2^2+0 = 6
Not(var)
Bitweise Not (~, Nicht) Umkehrung für eine Zahl (Not(n) = -n-1).
~0 = 1
~1 = 0
var Die umzukehrende Zahl.
returns Die Not Zahl (alle Bits umgekehrt).
example Not 1100 (12) =
..110011 (-13)
LDBits.Not(0) 'gibt -1 (alle Bits gesetzt)
OrBits(var1,var2)
Bitweise Or (|, Oder) Verkettung zweier Zahlen.
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
var1 Die erste Zahl.
var2 Die zweite Zahl.
returns Die Or Zahl (Bit gesetzt, wenn bereits ein Eingabebit gesetzt).
example 1100 (12) Or
1010 (10) =
1110 (14)
LDBits.OrBits(15, 255) '255
(0F | FF = FF, 00001111 | 11111111 = 11111111)
SetBit(var,bit)
Setzt ein Bit in einer Zahl (Setzen auf 1).
var Die Zahl in der das Bit gesetzt wird.
bit Der Index für das zu setzende Bit (1 bis 32).
returns Die geänderte Zahl mit neu gesetztem Bit.
UnsetBit(var,bit)
Entfernt ein Bit in einer Zahl (Setzen auf 0).
var Die Zahl von der das Bit entfernt wird.
bit Der Index für das zu entfernende Bit (1 bis 32).
returns Die geänderte Zahl nach entferntem Bit.
XOrBits(var1,var2)
Bitweise XOr (^, eXklusivOder) Verkettung zweier Zahlen.
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
var1 Die erste Zahl.
var2 Die zweite Zahl.
returns Die XOr Zahl (Bit gesetzt, wenn nur ein Eingabebit gesetzt).
example 1100 (12) XOr
1010 (10) =
0110 (6)
LDBits.XOrBits(15, 255) '240
(0F ^ FF = F0, 00001111 ^ 11111111 = 11110000)
'Komplementärfarbe zu col
compl = LDBits.XOrBits(col, "#FFFFFF")
'2x Anwendung -> Identität
LDBits.XOrBits(LDBits.XOrBits(var1,var2),var2) 'var1