gpt4 book ai didi

c - 如何执行一个字节的循环旋转?

转载 作者:太空狗 更新时间:2023-10-29 17:27:21 25 4
gpt4 key购买 nike

我正在尝试实现一个函数,该函数执行一个字节向左和向右的循环旋转。

我为这两个操作编写了相同的代码。例如,如果您向左旋转,1010 将变为 0101。这是正确的吗?

unsigned char rotl(unsigned char c) {
int w;
unsigned char s = c;
for (w = 7; w >= 0; w--) {
int b = (int)getBit(c, w);//
if (b == 0) {
s = clearBit(s, 7 - w);
} else if (b == 1) {
s = setBit(s, 7 - w);
}
}
return s;
}

unsigned char getBit(unsigned char c, int n) {
return c = (c & (1 << n)) >> n;
}

unsigned char setBit(unsigned char c, int n) {
return c = c | (1 << n);
}

unsigned char clearBit(unsigned char c, int n) {
return c = c &(~(1 << n));
}

最佳答案

C中没有旋转运算符,但是如果你这样写:

unsigned char rotl(unsigned char c)
{
return (c << 1) | (c >> 7);
}

然后,根据这个:http://www.linux-kongress.org/2009/slides/compiler_survey_felix_von_leitner.pdf (第 56 页),编译器将弄清楚你想做什么,并仅在一条(非常快的)指令中执行它的旋转。

关于c - 如何执行一个字节的循环旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19204750/

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