Нет, это не ошибка. Это природа двойного дополнения целочисленной арифметики.
Например, давайте возьмем значение байта со знаком, которое находится между -128
и 127
.
127(0x7f)+1 = 128(0x80)
. Однако 0x80
на самом деле является двоичным представлением -128
.
Таким образом, для байта, 128(0x80) = -128(0x80)
Итак -128(0x80) * -1 = 128(0x80) = -128(0x80)