kclib1

(1) kpopCount32


int kpopCount32(unsigned int b)
{
    b -= b >> 1 & 0x55555555U;
    b = (b & 0x33333333U) + (b >> 2 & 0x33333333U);
    b = (b + (b >> 4)) & 0x0f0f0f0fU;
    return (b * 0x01010101U) >> 24;
}

(2) kpopCount64


int kpopCount64(unsigned long long b)
{
    b -= b >> 1 & 0x5555555555555555ULL;
    b = (b & 0x3333333333333333ULL) + (b >> 2 & 0x3333333333333333ULL);
    b = (b + (b >> 4)) & 0x0f0f0f0f0f0f0f0fULL;
    return (b * 0x0101010101010101ULL) >> 56;
}

(3) kgetMsb32


unsigned int kgetMsb32(unsigned int i)
{
    i >>= 1;
    i |= i >> 1;
    i |= i >> 2;
    i |= i >> 4;
    i |= i >> 8;
    i |= i >> 16;
    return i + 1;
}

こめんと欄


コメントお名前NameLink

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS