Причина этого в том, что использование побитового НЕ инвертирует все биты значения.Если вы сохраняете значение 1 в 8-битном целом со знаком, вы сохраняете двоичное значение 00000001. Если вы применяете побитовое НЕ, вы получаете 11111110, что для 8-битного целого со знаком является двоичным значением для -2.