您好,感谢任何有机会指导我正确方向的人。我是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;
}
再次感谢您的帮助,我最好不要寻找答案,而是指导我如何正确处理这个问题。
答案 0 :(得分:0)
你的解决方案似乎是正确的,但必须经历所有的事情。这个应该快一点,因为它只需要在signed char bits = -128;
if (v == 0)
return 0;
while ((v = v&(v-1)) != 0) {
bits >>= 1;
}
return bits;
位上运行:
v
只需在每个步骤中移除1
中的最低设置位,然后将带符号结果移到右侧,即将其填充到左侧的另一个{{1}}。