Мои текущие входные данные - «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, что даже не является двоичным числом?
Однако вы распечатываете целые числа. Если вам нужно двоичное представление, вам нужно будет вместо этого использовать Integer.toBinaryString.
попробуйте это, чтобы увидеть, что не так: System.out.println((int) '1');
Извините, carry - это int.




Бинарный файл 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')
Поскольку оба являются символами, 00000000 00110001 ^ 00000000 00110001 ---> 0
Вы понимаете разницу между
1и'1'?