___ answer21001661 ___
Niemand hat erwähnt, was die C FAQ empfiehlt, nämlich eine Reihe von guten alten Makros:
%Vor%
(über Zypern )
___ qstntxt ___
Ich habe die Klasse Bitset in Java und I verwendet würde gerne etwas Ähnliches in C machen. Ich nehme an, dass ich es manuell machen müsste, wie die meisten Sachen in C. Was wäre eine effiziente Art zu implementieren?
%Vor%
vielleicht
%Vor%
?
___ antwort4372519 ___
CCAN verfügt über eine Bitset-Implementierung, die Sie verwenden können: Ссылка
Aber wenn Sie es am Ende selbst implementieren (zum Beispiel, wenn Sie die Abhängigkeiten für dieses Paket nicht mögen), sollten Sie ein Array von Ints verwenden und die native Größe der Computerarchitektur verwenden:
%Vor%
Verwenden Sie keine bestimmte Größe (z. B. mit uint64 oder uint32), lassen Sie den Computer verwenden, was er verwenden möchte, und passen Sie ihn mithilfe von sizeof an.
___ answer24892676 ___
Ich empfehle meine BITSCAN C ++ - Bibliothek (Version 1.0 wurde gerade veröffentlicht). BITSCAN ist speziell auf schnelle Bit-Scan-Operationen ausgerichtet. Ich habe es verwendet, um NP-Hard-kombinatorische Probleme zu implementieren, die einfache ungerichtete Graphen wie die maximale Clique beinhalten (siehe BBMC Algorithmus, für einen führenden genauen Löser).
Ein Vergleich zwischen BITSCAN und den Standardlösungen STL bitset und BOOST dynamic_bitset finden Sie hier:
Ссылка
___ answer4372561 ___
Wie immer müssen Sie zuerst entscheiden, welche Art von Operationen Sie auf Ihrem Bitset ausführen müssen. Vielleicht eine Teilmenge von dem, was Java definiert? Danach können Sie entscheiden, wie Sie es am besten implementieren. Sie können sicherlich die Quelle für BitSet.java in OpenJDK nach Ideen suchen.
___ tag123c ___ C ist eine universelle Computerprogrammiersprache, die für Betriebssysteme, Bibliotheken, Spiele und andere Hochleistungsanwendungen verwendet wird. Dieses Tag sollte bei allgemeinen Fragen zur C-Sprache verwendet werden, wie in der Norm ISO 9899: 2011 definiert. Fügen Sie ggf. ein versionsspezifisches Tag wie c99 oder c90 für Fragen zu älteren Sprachstandards hinzu. C unterscheidet sich von C ++ und es sollte nicht mit dem C ++ - Tag kombiniert werden, wenn ein rationaler Grund fehlt.
___ answer23542596 ___
Sie können meinen Code PackedArray mit einem %code% von %code% ausprobieren.
Es implementiert einen Random-Access-Container, in dem Elemente auf der Bit-Ebene gepackt werden. Mit anderen Worten, es verhält sich so, als ob Sie in der Lage wären, z.B. %code% oder %code% array:
%Vor%
___ answer4372530 ___
Machen Sie es zu einem Array von unsigned int 64.
___ tag123bitset ___ Ein Bit-Array (auch bekannt als Bitmap, Bitset oder Bitstring) ist eine Array-Datenstruktur, die einzelne Bits (boolesche Werte) kompakt speichert.
___ qstnhdr ___ Wie implementiere ich ein Bitset in C?
___ antwort4372521 ___
Nun, Byte-Bitset [] scheint ein wenig irreführend, nein?
Verwenden Sie Bitfelder in einer Struktur und dann können Sie eine Sammlung dieser Typen verwalten (oder sie anderweitig verwenden, wie Sie es für richtig halten)
%Vor%
___