Недавно я провел курс Java (1-недельный курс крушения), и мы рассмотрели некоторую двоичную математику.
Этот унарный оператор (тильда, который, как мне кажется, он называл?), был нам объяснен таким образом:
Он инвертирует битовую диаграмму, превращая все "0" в "1" и каждый "1" в "0". например В байт имеется 8 бит. Если у вас есть следующий байт: 00000000, инвертированное значение изменится на 11111111.
Вышеприведенное объяснение является ясным и кратким, и оно имеет для меня смысл. До тех пор, пока я не попытаюсь его реализовать.
Учитывая это:
byte x = 3;
byte y = 5;
System.out.println(~x);
System.out.println(~y);
Вывод:
-4
-6
Я очень смущен тем, как это происходит.
Если +3 в бинарнике равно 11, то инверсия этого будет 00, что явно не -3.
Но поскольку в байте 8 бит, тогда не должно быть записано двоичное представление +3 как 00000011?
Что бы инвертироваться, чтобы стать 11111100. Преобразуется обратно в десятичное значение, это будет 252. Если, однако, вы пишете +3 как 011, тогда он действительно преобразуется в 100, что равно +4, но тогда как вы знаете это отрицательное число?
Как насчет того, попробуйте ли вы 0011, который преобразует в 1100, который, если вы используете первый бит в качестве знака, тогда он действительно становится -4.
А - так в этот момент я думал, что я куда-то ухожу.
Но тогда я добрался до второго значения y = 5.
Как мы это пишем? Используя ту же логику, +5 преобразуется в двоичный 0101, который инвертирует до 1010.
И теперь, когда я ужасно смущен. Это выглядит как знаковое значение -2 или значение без знака +10 десятичных чисел? Ни один из них не является -6, я распечатываюсь.
Опять же, если я увеличиваю длину до 8 цифр байта, +5 - 00000101, перевернутый - 11111010. И я действительно не могу найти способ превратить это в -6.
Кто-нибудь там понимает это, поскольку я понятия не имею, что здесь происходит, и чем больше номеров я распечатываю, тем больше я запутываюсь.
Google, похоже, не придумал что-нибудь по этому поводу - возможно, ему не нравится смотреть на маленькие указатели оператора.: - (