我正在將一些用Java編寫的代碼移植到C11中。 Java代碼使用BitSet翻轉矢量中的翻轉位。我知道有相應的BitSet for C++,但我不確定是否有類似的c11可用。我必須按照要求使用c11。我不太熟悉c11中較新的一組函數,因爲我以前的大多數代碼都是ANSI-C或C99。支持c11中的BitSet
在C(C11)中有這樣的東西嗎?還是我需要編寫自己的映射到內存組的函數,然後使用位操作符?
我正在將一些用Java編寫的代碼移植到C11中。 Java代碼使用BitSet翻轉矢量中的翻轉位。我知道有相應的BitSet for C++,但我不確定是否有類似的c11可用。我必須按照要求使用c11。我不太熟悉c11中較新的一組函數,因爲我以前的大多數代碼都是ANSI-C或C99。支持c11中的BitSet
在C(C11)中有這樣的東西嗎?還是我需要編寫自己的映射到內存組的函數,然後使用位操作符?
C(C11或其他)沒有BitSet本身。 C可以直接訪問內存,所以你可以直接使用數據類型。例如,可以使用uint8_t來設置8位的位,如下所示。
使用
uint8_t bitset = 0;
bitset = bitset | (1 << 4); // set 4th bit, like BitSet.set(4)
bitset = bitset & ~(1 << 3); // unset 3rd bit, like BitSet.clear(3)
bitset = ~bitset; // flip the bits, like BitSet.flip(0, 7)
bitset = bitset^(1 << 4); // flip the 4'th bit like BitSet.flip(4)
瞭解更多關於位運算符就我而言,沒有這樣的功能,在C標準庫中存在。你必須自己寫。幸運的是,bitset是最容易實現的數據結構之一。
我將刪除Java標記,因爲這個問題並不是真的與Java有關(除了使用Java類作爲速記來描述所需的行爲)。但請注意,問題要求工具或庫[關於Stack Overflow的主題](http://stackoverflow.com/help/on-topic),所以這個問題可能會被關閉。 – yshavit
簡單的'OR'ing /'AND'ing怎麼了? –
複製問題或多或少地回答問題,所以非常感謝您指出。但基本問題不同,因爲我問C11是否支持BitSit,而不是如何實現。我不是特別要求如何實施它,也不要求圖書館;這是一個C11語言問題。那是關閉的話題嗎? – Andy