使っているのがDXライブラリなので、C言語前提です。
 拾うアイテムをランダムに決定しようと、あれこれ考えていたのだけど。

 当初ビットフィールドでアイテムのジャンルごとに1ビット割り振って、普通に乱数使えばランダムに決定出来るなあと実装していたのだけど、バイト境界とかが面倒な事に気が付いて。 当方ビッグエンディアンで基礎学習した身で、リトルが未だ馴染めないでいます。
 次に考えたのが、enum で1,2,4,8,16・・・と列挙数を2の倍数で表現する、Windowsでよく見掛ける方法。これならunsigned long long溢れるまでシームレスに扱えそう。

 前者で途中まで実装してしまったので基本データ構造からやり直しになるのだけど、私の浅慮の限りは後者の方が柔軟かなあ、でも書き換えコストに見合うかなあと
 実際はどっちが賢いんですかね?