Leetcode: Добавить двоичный файл (Java) Как он может выполнять сложение между одним символом и одним int?

#java #string #char

#java #строка #символ

Вопрос:

 class Solution {
    public String addBinary(String a, String b) {
        int len1 = a.length() - 1;
        int len2 = b.length() - 1;
        
        int carry = 0;
        
        StringBuilder sb = new StringBuilder();
        
        while (len1 >= 0 || len2 >= 0){
            int sum = carry;
            if (len1 >= 0) sum  = a.charAt(len1) - '0';
            if (len2 >= 0) sum  = b.charAt(len2) - '0';
            
            sb.append(sum%2);
            carry = sum/2;
    
            len1--;
            len2--;
        
        }
        if(carry != 0) sb.append(carry);
        return sb.reverse().toString(); 
    }
}
 

По-видимому, этот код работает для решения, мне просто трудно понять вопрос. Для этой строки:

 sum  = a.charAt(len1) - '0';
 

sum — это целое число, a.charAt(len1) возвращает символ, как он может выполнять сложение между целым числом и символом? кроме того, что это значит — ‘0’?

Ответ №1:

char s — это существенно меньшие целые числа с привязанной к ним причудливой печатью. A char фактически содержит код unicode для определенного символа и может обрабатываться как целое число для сложения и вычитания. Примечательным в этом является то, что символы, представляющие цифры, являются последовательными (за «0» следует «1», за которым следует «2» и т. Д.). Итак, если вы вычтете ‘0’ (т. Е. «Код юникода для символа 0) из символа, вы получите фактическую цифру, которую он представляет.