我想通过'n'位旋转无符号字符。但是我没有得到理想的结果。这是我的代码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个蠕变?我使用一个无符号字符作为数据类型。所以它不应该超过8位。有人可以解释这个吗?
由于
CHID
您正在转移(或通过)签名类型('char')的符号位。这是**未定义的行为**。改用'unsigned char'。 – WhozCraig
@WhozCraig他在哪里转移签名的“char”? – 2014-01-22 17:23:43
@ H2CO3在我的咖啡剥夺智力雾头。谢谢你保持诚实,先生= P – WhozCraig