Это не может быть сделано переносимым способом с битовыми операциями в C. Представления для целочисленных типов со знаком, которые допускает стандарт, могут быть намного более странными, чем вы могли бы предположить. В частности, значение со знаковым битом и, в противном случае, с нулем, не обязательно должно быть допустимым значением для типа со знаком или типа без знака, но так называемым представлением ловушек для обоих типов.
Таким образом, все вычисления с битовыми операторами, которые вы можете выполнять, могут привести к неопределенному поведению.
В любом случае, как предполагают некоторые другие ответы, это не является действительно необходимым, и сравнение с <
или >
должно быть достаточно в любом практическом контексте, более эффективно, легче читать ... так что просто сделайте это таким образом.