Я бы с осторожностью относился к любым побитовым трюкам для определения знака целых чисел, так как тогда вам придется делать предположения о том, как эти числа представляются внутри.
Почти 100% времени целые числа будут храниться как комплимент для двоих , но не стоит делать предположения о внутренностях системы, если вы не используете тип данных, который гарантирует определенный формат хранения .
В дополнении к двум вы можете просто проверить последний (самый левый) бит в целом числе, чтобы определить, является ли он отрицательным, так что вы можете сравнить только эти два бита. Это будет означать, что знак 0 будет иметь тот же знак, что и положительное число, что противоречит функции знака, реализованной в большинстве языков.
Лично я бы просто использовал функцию знака на выбранном вами языке. Маловероятно, что при таком расчете возникнут какие-либо проблемы с производительностью.