Рассмотрим двоичное представление числа 32789. Оно будет таким:

 Номера битов:  F E D C B A 9 8 7 6 5 4 3 2 1 0
     Значения:  1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1

Раз старший разряд имеет значение 1, то число будет отрицательным (не забывайте тот факт, что эта переменная имеет тип int, что позволяет ей принимать как положительные, так и отрицательные значения). Мы ответили на одну часть вопроса: откуда взялось отрицательное число? Попробуем ответить на вторую часть вопроса: почему именно это число -32747?

    Напомним алгоритм получения из положительного натурального двоичного числа соответствующего отрицательного двоичного числа:

    Воспользуемся этим алгоритмом. Возьмем двоичное представление числа 32747:

 Номера битов:  F E D C B A 9 8 7 6 5 4 3 2 1 0
     Значения:  0 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1

Инвертируем его биты:

 Номера битов:  F E D C B A 9 8 7 6 5 4 3 2 1 0
     Значения:  1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0

К получившемуся числу прибавим единицу:

 Номера битов:  F E D C B A 9 8 7 6 5 4 3 2 1 0
     Значения:  1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0
               +                              1
                ------------------------------- 
    Результат:  1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1

Если сравнить получившийся результат с двоичным представленим числа 32789, то можно заметить, что они одинаковы. Отсюда можно сделать вывод, что числа 32789 и -32747 имеют в памяти компьютера одинаковое представление, но содержимое этого участка памяти интерпретируется по-разному в зависимости от типа переменной!


Замечание. Обратите внимание на тот факт, что |-32768| - 32747 = 21 (разность модуля нижней границы значения целой переменной и получившегося результата равна 21). С другой стороны, двоичное представление пяти младших битов числа -32747 равно 101012. Если перевести это число в десятичную систему счисления, то получим также 21 (1*24+1*22+1*20=16+4+1=21).