1. Учтите следующее:
unsigned int a, b;
b = a >> ((sizeof a) * CHAR_BIT);
/* or 2nd operand greater than ((sizeof a) * CHAR_BIT) */
Это определенное, неопределенное поведение или поведение, зависящее от реализации?
2. Еще один подвопрос:
В случае, если a
равно signed int
, и он смещен меньше, чем его длина в битах, это реализация сдвига битов со знаком, определенная или неопределенное поведение. В обоих случаях:
- При переключении вправо:
a >> 5
- При переключении влево:
a << 5
EDIT вопрос изменен