In C/C++ Zeichen sind als 8-Bit-Ganzzahlen mit ASCII-Codierung gespeichert. Also, wenn Sie x-='0';
tun, subtrahieren Sie den ASCII-Wert von '0', der 48 von dem ASCII-Wert von '2' ist, die 50 ist. X ist dann gleich 2, das ist ein spezielles Steuerzeichen STX (Anfang des Textes) , die nicht druckbar ist.
Wenn Sie arithmetische Operationen an Zeichen durchführen möchten, ist es besser, vor jedem Vorgang '0' von jedem Zeichen zu subtrahieren und '0' zum Ergebnis hinzuzufügen. Um Probleme wie das Überfahren des Bereichs des 8bit-Wertes zu vermeiden, würde ich vorschlagen, sie auf Ints oder Longs zu setzen.
char x = '2';
int tempVal = x - '0';
/*
Some operations are performed here
*/
x = tempValue % 10 + '0';
// % 10 - in case it excedes the range reserved for numbers in ASCII
cout << x << endl;
Es ist viel sicherer, diese Operationen auf größeren Werttypen durchzuführen, und der Charakter der ‚0‘ subtrahieren können Sie Operationen unabhängig von der ASCII-Codierung auszuführen, wie Sie mit lässigen ganzen Zahlen tun würde. Dann fügen Sie '0' hinzu, um zur ASCII-Codierung zurückzukehren, mit der Sie eine Zahl drucken können.
versuchen, '2' und '0' nacheinander auszugeben, und dann schauen Sie sich diese [Tabelle] (http://www.asciitable.com/) an und sehen, was der Wert von 2 ist und char. – Incomputable
@ kobe24 weil ''2' - '0' == 2' (und' 2' ist kein _printable_ Zeichen). –
@DimChtz Nur weil 'x - = char (0);' ist das gleiche wie 'x - = 0;', also ist 'x' unverändert. – molbdnilo