uint32配列のビットを設定および取得するための超高速関数を開発しようとしています。たとえば、「ビット1035を1に設定」と言うことができます。次に、1035/32でインデックス付けされたuint32がビット位置1035%32で使用されます。特にsetbit関数での分岐は好きではありません。
これが私のアプローチです:
void SetBit(uint32* data, const uint32 bitpos, const bool newval)
{
if (newval)
{
//Set On
data[bitpos >> 5u] |= (1u << (31u - (bitpos & 31u)));
return;
}
else
{
//Set Off
data[bitpos >> 5u] &= ~(1u << (31u - (bitpos & 31u)));
return;
}
}
と
bool GetBit(const uint32* data, const uint32 bitpos)
{
return (data[bitpos >> 5u] >> (31u - (bitpos & 31u))) & 1u;
}
ありがとうございました!