~ 3 означает «изменить все 1 с 0 на 0 и 0 на 1 с», поэтому если 3 в двоичном виде равно 0000000000000011, то ~ 3 равно 1111111111111100., поскольку первый бит ~ 3 равен 1, это отрицательное число. чтобы выяснить, какое отрицательное число, в комментарии 2s, вы инвертируете все биты и добавляете 1, так что инвертируя мы вернулись к 3, затем добавив 1, мы получим 4.