Я пытаюсь повернуть символ unsigned с помощью '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
что 1 в MSB ползут? Я использую unsigned char как тип данных. Поэтому он не должен превышать 8 бит. Может ли кто-нибудь объяснить это?
Благодаря
чида
Вы переходите в (или через) бит знака подписанного типа ('char'). Это неопределенное поведение **. Вместо этого используйте 'unsigned char'. – WhozCraig
@WhozCraig Где он переводит подписанный 'char'? –
@ H2CO3 в моей лишенной кофе головорезые головы. Спасибо, что поддержал меня честно, сэр = P – WhozCraig