3
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;
}
ありがとうございました!
?何語?コンパイラの出力は今何ですか?すでにかなり早いことがわかるかもしれません。 –
x86(32ビット)です。確かに、それはすでにかなり速いですが、私は思っています - 特にsetbit関数では、私はまだもっと速いかもしれません... – vls
あなたのSetBitは本当にFlipBitですが、おそらくxorを使うことができるオペレーター)。 –