在C中重新排列位

时间:2016-01-26 19:08:11

标签: c

您好,感谢任何有机会指导我正确方向的人。我是C编程的新手,对于一个类,我必须编写一个名为rearrangeBits的函数,它将采用8位整数,将其转换为二进制等价,并将有效位一直向左移。因此,例如,如果我传入数字25(0001 1001),该函数应返回1110 0000.老师给我们这一点开头:

uint8 rearrangeBits(uint8 v)
{
    /* Your code goes here */
}

我尝试解决方案如下:

uint8 rearrangeBits(uint8 v)
{
    unsigned int i;
    char bits = 0;
    int a = 7;

    for(i = 7; i > 0; i--)
    {
        int test = v >> i;

        if(test & 1)
        {
            bits |= (1 << a);
            a--;
        }
    }


    return bits;
}

再次感谢您的帮助,我最好不要寻找答案,而是指导我如何正确处理这个问题。

1 个答案:

答案 0 :(得分:0)

你的解决方案似乎是正确的,但必须经历所有的事情。这个应该快一点,因为它只需要在signed char bits = -128; if (v == 0) return 0; while ((v = v&(v-1)) != 0) { bits >>= 1; } return bits; 位上运行:

v

只需在每个步骤中移除1中的最低设置位,然后将带符号结果移到右侧,即将其填充到左侧的另一个{{1}}。