(int)'0' seems to give the position of the character '0' on the ASCII table. If a is an integer type it's assigned a corresponding ASCII value, and for it to represent an integer correctly in a string it needs to compute a difference of ASCII values.