gpt4 book ai didi

c++ - 为什么该算法适用于反向位

转载 作者:行者123 更新时间:2023-11-30 21:08:36 25 4
gpt4 key购买 nike

嘿,大家好,我对这段代码的变量 n 和 b 的用途感到困惑。我知道每一行代码在做什么,但我只是不明白它如何进行位反转的重要性。如果有人可以帮助理解每一行,那就太好了。我已经对代码的某些行进行了评论,我认为它在做什么

        int r = 0;//initalizing r though it doesn't matter what value we use 
while (b)//don't understand the meaning here
{
r <<= 1; //I know this means left shift one or multiply by 2
r |= (n & 1);//I believe this line says AND the number with 1
n >>= 1;//divide by 2
b >>= 1;//divide by 2
}
return r;

最佳答案

发布它只是为了展示它是如何工作的。希望有帮助:

#include <stdio.h>
#include <stdint.h>

void print8Bits( char *var_name, uint8_t value )
{
uint8_t mask = 0x80;

printf("%s = 0b", var_name);

while (mask)
{
printf("%c", (value & mask) ? '1':'0');

mask >>= 1;
}

printf(" - %02X\n", value);
}

int main(void)
{
uint8_t b=5;
uint8_t n=0xAA;
uint8_t r = 0;//initalizing r though it doesn't matter what value we use+

while (b)//don't understand the meaning here
{
r <<= 1; //I know this means left shift one or multiply by 2
r |= (n & 1);//I believe this line says AND the number with 1
n >>= 1;//divide by 2
b >>= 1;//divide by 2

print8Bits("r", r);
print8Bits("n", n);
print8Bits("b", b);

printf("\n");
}
}

输出是:

r = 0b00000000 - 00
n = 0b01010101 - 55
b = 0b00000010 - 02

r = 0b00000001 - 01
n = 0b00101010 - 2A
b = 0b00000001 - 01

r = 0b00000010 - 02
n = 0b00010101 - 15
b = 0b00000000 - 00

如您所见:

  • 只要 b 的值为 != 0,while 就会继续循环。
  • 每个循环将 n 的位 1 的值存储到 n位 1 中,然后左移。
  • n 的每个循环值都会右移,以在位 1 位置准备一个新位。

关于c++ - 为什么该算法适用于反向位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37659761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com