num2str() does not create symbolic variables: it converts the numbers into strings of characters. The internal representation of the character '1' is not 1; the internal representation for the character '1' happens to be 49. When you do the addition, you are not adding 62 + 2, you are adding ['6' '2'] + '2' which is internally [54 50] + 50, which gives you the [104 100] that you see.
The characters '0' through '9' are internally 48 through 57. char(48) == '0'.
The reasons that the characters '0' through '9' are not represented internally as the decimal values 0 through 9 are historical, involving mechanical movements on "automatic telegraphs" and 5 bit codes with "shift select" characters as needed to move between ranges. Decisions taken like 100 years ago that got merged into standards that still carry through (because there is no good reason to change them.)
Best Answer