The value of a char
can be 0-255, where the different characters are mapped to one of these values. The numeric digits are also stored in order '0'
through '9'
, but they're also not typically stored as the first ten char
values. That is, the character '0'
doesn't have an ASCII value of 0
. The char value of 0
is almost always the
null character.
Without knowing anything else about ASCII, it's pretty straightforward how subtracting a '0'
character from any other numeric character will result in the char value of the original character.
So, it's simple math:
'0' - '0' = 0 // Char value of character 0 minus char value of character 0
// In ASCII, that is equivalent to this:
48 - 48 = 0 // '0' has a value of 48 on ASCII chart
So, similarly, I can do integer math with any of the char
numberics...
(('3' - '0') + ('5' - '0') - ('2' - '0')) + '0') = '6'
The difference between 3
, 5
, or 2
and 0
on the ASCII chart is exactly equal to the face value we typically think of when we see that numeric digit. Subtracting the char '0'
from each, adding them together, and then adding a '0'
back at the end will give us the char value that represent the char that would be the result of doing that simple math.
The code snippet above emulates 3 + 5 - 2
, but in ASCII, it's actually doing this:
((51 - 48) + (53 - 48) - (50 - 48)) + 48) = 54
Because on the ASCII chart:
0 = 48
2 = 50
3 = 51
5 = 53
6 = 54
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…