Il s'agit d'une vieille astuce ASCII qui fonctionne pour tout codage qui aligne les chiffres de '0' à '9' de manière séquentielle en commençant par '0'. En ASCII, "0" est un caractère de valeur 0x30 et "9" est 0x39. En résumé, si vous avez un caractère qui est un chiffre, la soustraction de "0" le "convertit" en sa valeur numérique.
Je dois être en désaccord avec @Lukas Eder et suggérer que c'est un tour terrible ; parce que l'intention de cette action s'approche de 0% d'évidence à partir du code. Si vous utilisez Java et que vous avez un String
qui contient des chiffres et que vous voulez convertir ledit String
à un int
Je vous suggère d'utiliser Integer.parseInt(yourString);
.
Cette technique a l'avantage d'être évidente pour le futur programmeur de maintenance.
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.