Ein char ist effektiv nichts anderes als ein 8bit uint, darum kannst du problemlos ein int von einem char abziehen, allerdings führt das zu diversen Problemen, wenn das Ergebnis kleiner als 0 oder grösser als 256 ist.
Der Wert eines char steht für ein Zeichen, nicht für einen Wert, machst du also
char x = 'a';
x = x + 3;
dann bekommst du
x == 'd'
Nachdem auch alle Zahlen in ihrer Representation als char hintereinander stehen, kannst du also auch problemlos damit rechnen.
char x = '1';
x = x + 3;
x == '4';
Machst du aber
char x = '9';
x = x + 3;
bekommst du abhängig vom verwendeten Zeichensatz den Buchstaben, dessen char-Wert um 3 grösser als der char-Wert von 9 ist, also z.B.
x == 'c';
Machst du
char x = '2';
char y = '5';
char z = x - y;
bekommst du
z == 254 bzw. das Zeichen was in deinem Zeichensatz den Wert 254 hat.
Der Wert eines char steht für ein Zeichen, nicht für einen Wert, machst du also
char x = 'a';
x = x + 3;
dann bekommst du
x == 'd'
Nachdem auch alle Zahlen in ihrer Representation als char hintereinander stehen, kannst du also auch problemlos damit rechnen.
char x = '1';
x = x + 3;
x == '4';
Machst du aber
char x = '9';
x = x + 3;
bekommst du abhängig vom verwendeten Zeichensatz den Buchstaben, dessen char-Wert um 3 grösser als der char-Wert von 9 ist, also z.B.
x == 'c';
Machst du
char x = '2';
char y = '5';
char z = x - y;
bekommst du
z == 254 bzw. das Zeichen was in deinem Zeichensatz den Wert 254 hat.