无符号字符串旋转n位

时间:2014-01-22 17:19:21

标签: c bit-manipulation

我试图用'n'位旋转无符号字符。但我没有得到理想的结果。这是我的代码

void left_rotate(unsigned char a, int no){
        // no - number of times to rotate
        printf("%d\n", ((a << no) | (a >> (8-no))));
}

我从邮件中调用此函数如下

unsigned char a = 'A';
left_rotate(a, 2);

我期待以下输出

//'A' = 65 = 01000001
// I am rotating in left direction by two times
// a << 2 = 00000100
// a >> 6 = 00000001
(00000100 | 00000001 = 00000101 = 5 in decimal)

但我得到了不同的输出

// The output in my screen = 100000101 = 261 in decimal

MSB中的1如何进入?我使用unsigned char作为数据类型。所以它不应该超过8位。有人可以解释一下吗?

由于

CHID

1 个答案:

答案 0 :(得分:10)

由于<<将其参数提升为unsigned int,因此需要屏蔽移位结果的高位:

printf("%d\n", (((a << no) & 0xFF) | (a >> (8-no))));

Demo on ideone(打印5)。