Мне нужна помощь в понимании языка C. Я только начал. У меня есть этот фрагмент кода из википедии:
unsigned int rotl(unsigned int value, int shift) {
return (value << shift) | (value >> (sizeof(value) * CHAR_BIT - shift));
}
Я понимаю, что означает вращение битов. Я просто не понимаю эту реализацию. Почему я должен выполнять здесь оператор ИЛИ? И что на самом деле делает правая часть?
Я сдвигаю значение вправо на количество байтов, умноженное на значение (количество битов в переменной char минус сдвиг, который я хочу). Почему я должен это делать? Если я придумаю пример. Я хочу сдвинуть без знака 1011 (Base 2) 2 бита влево. Я делаю то, что говорит код:
0000 0000 0000 0000 0000 0000 0000 1011 << 2 = 0000 0000 0000 0000 0000 0000 0010 1100
1011 >> (4*(8-2))=24 = 0000 0000 0000 0000 0000 0000 0000 0000 0000;
выполнить |: = 0000 0000 0000 0000 0000 0000 0010 1100.
Хорошо, это не сработало. Что я делаю неправильно?
Спасибо!
4 * (8 - 2)
должно быть4*8 - 2
. Кроме того, почему это не сработало? Ваш результат правильный. Правая смена просто не способствовала вашей операции. - person M Oehm   schedule 01.05.20140x1011 >> 30
равно нулю. Выберите число со старшими битами или поверните0x1011
на 30 бит. - person M Oehm   schedule 01.05.2014