В C, чтобы получить беззнаковое смещение, вы просто делаете смещение на беззнаковом типе.
unsigned int result = (unsigned int)valueToBeShifted >> shiftAmount;
Обратите внимание, что нет гарантии, что >>
для типа со знаком дает вам сдвиг со знаком в C - это поведение, определяемое реализацией. Однако наиболее распространенные реализации производят сдвиг со знаком, если тип подписан.