Как выровнять 32-битное целое влево? - PullRequest
0 голосов
/ 15 января 2019

У меня есть 32-разрядная целочисленная переменная в шестнадцатеричном формате, скажем 0x9B13488 или 0x1407E8. По умолчанию он выровнен по правому краю 0x099B1348 или 0x001407E8. Но я хочу, чтобы он был выровнен по левому краю 0x9B134880 или 0x1407E800. Может ли кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 15 января 2019

Что вы действительно просите, так это если установлены старшие 4 бита. Вы можете сделать это следующим образом:

uint32_t left_align(uint32_t value)
{
    if (value) {
        while ((value & 0xF0000000U) == 0) {
            value <<= 4;
        }
    }
    return value;
}

Пока значение не равно нулю, а 4 старших разряда равны 0, сдвигайте влево на 4, пока они не станут ненулевыми.

...