長さ 96 のビットマップを追跡する必要がある機能に取り組んでいます。このマップを使用して、以下の asic をプログラムします。96 ビットを保持する標準の整数型はありますか。64 ビットの場合、unsigned long long があります。96ビットに似たものはありますか? 別の提案も歓迎します。
PS: これは Linux ベースの Cisco OS です。言語はCです。
サイズが正確に 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)
これは私にとってはうまくいきましたgcc
。uint96_t
のサイズをテストすると、sizeof
12 バイト (12 * 8 = 96) になるはずです。
GCC は__int128
、それをサポートするターゲット上で 128 ビット整数をサポートしていますが、特に 96 ビットをサポートするものはありません。
私はおそらく 3 つの uint の配列を使用します。それは十分に速く、それほど複雑ではありません。
EG、ビットを設定するには:
wordNo = i / 32
bitNo = i - (32*wordNo)
mask = 2 ** bitNo
array[wordNo] |= mask
...またはそのあたり。