Рассмотрим двоичное представление числа 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 имеют в памяти компьютера одинаковое представление, но содержимое этого участка памяти интерпретируется по-разному в зависимости от типа переменной!