2

長さ 96 のビットマップを追跡する必要がある機能に取り組んでいます。このマップを使用して、以下の asic をプログラムします。96 ビットを保持する標準の整数型はありますか。64 ビットの場合、unsigned long long があります。96ビットに似たものはありますか? 別の提案も歓迎します。

PS: これは Linux ベースの Cisco OS です。言語はCです。

4

4 に答える 4

3

サイズが正確に 96 ビットである1 つの変数を作成する方法があります: ユニオンまたは構造体のビットフィールド。

typedef union { // you can use union or struct here
    __uint128_t i : 96;
} __attribute__((packed)) uint96_t;

uint96_t var;  // new uint96_t variable
var.i = 123;   // set the value to 123 (for example)

これは私にとってはうまくいきましたgccuint96_t のサイズをテストすると、sizeof12 バイト (12 * 8 = 96) になるはずです。

于 2012-07-15T10:10:10.483 に答える
3

GCC は__int128、それをサポートするターゲット上で 128 ビット整数をサポートしていますが、特に 96 ビットをサポートするものはありません。

于 2012-07-13T17:30:14.047 に答える
3

私はおそらく 3 つの uint の配列を使用します。それは十分に速く、それほど複雑ではありません。

EG、ビットを設定するには:

wordNo = i / 32
bitNo = i - (32*wordNo)
mask = 2 ** bitNo

array[wordNo] |= mask

...またはそのあたり。

于 2012-07-13T17:40:07.583 に答える