我正在尝试将一个无符号字符向左旋转'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);
I expected the following output
//'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
为什么最高位出现了1?我的数据类型是无符号字符,所以它不应该超过8位。有人能解释一下吗?
谢谢
Chid
char
)的符号位。这是未定义行为。请改用unsigned char
。 - WhozCraigchar
吗? - user529758