К сожалению, многие из приведенных выше ответов неверны. Давайте предположим, что 3-битное слово:
без знака: 4 5 6 7 0 1 2 3 == подписано: -4 -3 -2 -1 0 1 2 3 (биты: 100 101 110 111 000 001 010 011)
Метод Пола Р. неверен. Предположим, мы хотим знать, если 3> 2. min (3,2) == 2, что говорит о да, поэтому метод работает здесь. Теперь предположим, что мы хотим знать, если 7> 2. Значение 7 равно -1 в знаковом представлении, поэтому min (-1,2) == -1, что неверно указывает на то, что 7 не больше 2 без знака.
Метод Андрея тоже неверен. Предположим, что мы хотим знать, если 7> 2, или a = 7, и b = 2. Значение 7 равно -1 в представлении со знаком, поэтому первый член (a> b) не выполняется, и метод предполагает, что 7 не больше чем 2.
Однако метод BJobnh, исправленный Алексеем, является правильным. Просто вычтите 2 ^ (n-1) из значений, где n - количество бит. В этом случае мы бы вычли 4, чтобы получить новые соответствующие значения:
старая подпись: -4 -3 -2 -1 0 1 2 3 => новая подпись: 0 1 2 3 -4 -3 -2 -1 == новая без знака 0 1 2 3 4 5 6 7.
Другими словами, unsigned_greater_than (a, b) эквивалентен sign_greater_than (a - 2 ^ (n-1), b - 2 ^ (n-1)).