/// halves-optimized method unrolled for 32-bit integer
unsigned rbH1 (unsigned arg)
{
arg = ((arg << 1) & 0xAAAAAAAA) | ((arg >> 1) & 0x55555555);
arg = ((arg << 2) & 0xCCCCCCCC) | ((arg >> 2) & 0x33333333);
arg = ((arg << 4) & 0xF0F0F0F0) | ((arg >> 4) & 0x0F0F0F0F);
arg = ((arg << 8) & 0xFF00FF00) | ((arg >> 8) & 0x00FF00FF);
arg = ((arg << 16) & 0xFFFF0000) | ((arg >> 16) & 0x0000FFFF);
return arg;
}