XOR не дает мне числа 0 или 1

Мои текущие входные данные - «11» и «1». Моя более длинная переменная - «11», а перенос - «1».

int carry = 1;
String longer = "11";
System.out.println(carry);  ---> 1
System.out.println(longer.charAt(1)); ---> 1
System.out.println(carry ^ longer.charAt(i)); ---> 48

Почему carry = 1 и longer.charAt(i) = 1, но когда я XOR два, я получаю 48, что даже не является двоичным числом?

Вы понимаете разницу между 1 и '1'?

Sneftel 01.07.2018 17:27

Однако вы распечатываете целые числа. Если вам нужно двоичное представление, вам нужно будет вместо этого использовать Integer.toBinaryString.

Makoto 01.07.2018 17:27

попробуйте это, чтобы увидеть, что не так: System.out.println((int) '1');

Lino 01.07.2018 17:29

Извините, carry - это int.

Amy Chen 01.07.2018 17:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
4
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Бинарный файл char 1 - 00000000 00110001,

Бинарный файл int 1 - 00000000 00000000 00000000 00000001

когда вы используете char 1 ^ int 1, char 1 будет повышен до int путем добавления 16 нулей в начале 00000000 00110001, так что вы фактически делаете:

00000000 00000000 00000000 00110001 
^
00000000 00000000 00000000 00000001

результат

00000000 00000000 00000000 00110000, in dicimal 48

Вы можете разобрать char 1 на int 1 до ^:

int carry = 1;
String longer = "11";
int longerInt = Integer.parseInt(String.valueOf(longer.charAt(1)));

System.out.println(carry ^ longer.charAt(1)); //48
System.out.println(carry ^ longerInt); // 0

Спасибо! Оно работает. Вы знаете, почему System.out.println(shorter.charAt(0) ^ longer.charAt(0) ^ 1 == 1) работает даже без разбора ?; (shorter.charAt (0) == '1' && long.charAt (0) == '1')

Amy Chen 01.07.2018 17:40

Поскольку оба являются символами, 00000000 00110001 ^ 00000000 00110001 ---> 0

xingbin 01.07.2018 17:42

Другие вопросы по теме