Очень странно, что Вы получаете -3 вручную :)
Смотрите:
1 в двоичном представлении с учетом 32 бит превращается в 0..0 * 31 + 1, т.е. 31 нуль (ноль, неважно) и одну единицу.
Далее Вы делаете побитовое отрицание (~), то есть мы меняем все 0 на 1 и наоборот. Получили 31 единицу и один ноль. 1..1 * 31 + 0.
-------------------------
На самом деле этот шаг не нужен, но для общего развития - отрицательные числа в двоичной системе получаются путем побитового отрицания исходного числа и прибавлением единицы в двоичной системе. Следовательно, мы можем узнать, что за число ~x, если сделаем наоборот - отнимем единицу и потом обратим биты:
1..1 * 30 + 01
0..0 * 30 + 10 = 2 => значит ~x = -2 при x = 1
-------------------------
Идем дальше. Вы применяете побитовое ИЛИ, которое пишет единицы во всех битах, где они замечены либо в одном числе, либо в другом.
Т.к. Вы берете 1..1 * 31 + 0 и 0..0 * 31 + 1, то у Вас все 32 бита - единицы получаются.
Ну и дальше делаем как уже выше написано: отнимаем единицу и обращаем биты:
1..1 * 32 => 1..1 * 31 + 0 => 0..0 * 31 + 1 = 1 => следовательно, само число ~x | x = -1