Cela fonctionne bien :
int foo = bar.charAt(1) - '0';
Pourtant, ce n'est pas le cas - car bar.charAt(x) renvoie un caractère :
int foo = bar.charAt(1);
Il semble qu'en soustrayant '0' du caractère, on le transforme en un nombre entier.
Pourquoi, ou comment, la soustraction de la chaîne '0' (ou est-ce un caractère ?) convertit-elle un autre caractère en un nombre entier ?
36 votes
Ne faites pas l'erreur de penser que
'0' == 0
. En réalité,'0' == 48
.2 votes
cliquez sur Ah, maintenant ça prend tout son sens ! Si seulement tu avais mis ça comme réponse et m'avais indiqué cs.utk.edu/~pham/ascii_table.jpg
0 votes
Ce cast implicite ne retourne pas la représentation décimale du caractère, comme @MarkPeters l'a souligné, donc si par exemple bar.charAt(1) retourne 'A', dont la représentation décimale est 65, int foo sera 17, 'A' - '0' = 65 - 48 = 17 et non 65.
1 votes
Cette astuce est utilisée dans de nombreuses questions de Leetcode, mais je ne vois personne demander comment cette astuce fonctionne pour les questions de Leetcode.