This is exactly what should happen: when you invert the binary representation of zero, you get a negative; when you invert the binary representation of one, you get negative two in two representations of the representation.
00000000 --> ~ --> 11111111 // This is -1
00000001 --> ~ --> 11111110 // This is -2
, bool, ~ int . a bool a bool, ! ~.