プログラミング getchar

他人のソースよんでたら、

   while( (c = getchar()) != EOF ) {
        if( isdigit( c ) ) {
            val = val * 10 + (c - '0'); 

ってのがあって、
val = val * 10 + (c - '0');
ってのが最初理解できなかった。
man getcharすると、
stream で指定された入力から、次の文字 (すなわちバイト)
を符号なし文字から整数に変換して返します。
と書いてあった。
つまり、
21と入力すると、
2はasciiで50で0は48だから...
val = 2 = 0 * 10 + (50 - 48);
次に1を読んで...
val = 21 = 2 * 10 + (49 - 48);
というわけ。
ま、gdbつかって調べたんだけれどね...