Minus-operator mit char-Variablen
Dies ist sehr trivial, aber ich bin nicht immer es.
shadyabhi@archlinux /tmp $ ./a.out
2345
51 <-- **Why?**
3
shadyabhi@archlinux /tmp $ ./a.out
abhi
98
50 <-- **Why?**
shadyabhi@archlinux /tmp $ cat main.c
#include <stdio.h>
int main()
{
char a[10];
scanf("%s", a);
printf("%d\n", a[1]);
printf("%d\n", a[1] - '0');
return 0;
}
shadyabhi@archlinux /tmp $
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn
a[]
enthält den string"2345"
wie hast du Sie eingegeben, dann der Ausdrucka[1]
ist der Zeichen-code für das Zeichen'3'
. Da bist du mit einer ASCII-Darstellung wie die zugrunde liegende Codierung (basierend auf den codes, die Sie bekommen, obwohl es nicht zwingend vorgeschrieben ist der standard), die Charaktere'0'
thru'9'
sind vertreten durch die dezimal-Werte48
thru57
(hex0x30
thru0x39
).In anderen Worten, Sie haben:
Die ASCII-Tabelle ist:
Im zweiten Fall mit
"abhi"
,a[1]
gleichb
die, wenn Sie untersuchen, die Tabelle oben, ist ein Zeichen-code98
dezimal ( hex0x62
).Für die Ausgabe Zeilen, in denen Sie subtrahieren
'0'
, das ist eigentlich die Subtraktion der Zeichen-code für'0'
, die dezimal48
oder0x30
hex.'0'
..'9'
zu haben zusammenhängende Darstellungen, so dass zum Beispiel'5' - '0' == 5
. Die Sprache nicht die gleiche Garantie für die Buchstaben, so dass'Z' - 'A'
ist nicht unbedingt 25.Diese: http://www.asciitable.com/ ist der ascii-Tabelle.
in Ihrem ersten Versuch bekam Sie 51, weil es '3' (char 3) ascii-Wert.
in der zweiten Versuch, Sie bekam 50, da 'b'=98 und '0'=48, also 'b'-'0'=50.
Dieser Rückkehr wird der ascii-code des eingegebenen Nummer in der zweiten position sind, dann wird der Wert dieser Zahl.
Wenn es '0', wird es wieder 48 dann 0.
Wenn es ist '1' wird es wieder 49 1 und so weiter.
Wenn Sie verwenden ein Zeichen, das keine Zahl ist, wird es wieder in seine ascii-code, dann ist die Differenz Ihrer ascii-code und ascii-code von '0'
Im Grunde eine operation (+ - ...) auf ein Zeichen wird sich auf Ihre ascii-codes: siehe hier.
Also im Grunde
a[1] - '0'
Rückkehr der integer-Wert des zweiten Buchstaben der getippt wird.Diese wird verwendet, um zu konvertieren Benutzer-Eingabe in Ganzzahlen wie in die atoi () - Funktion.
Ich sehe, Sie sind mit linux. Der Befehl "ascii" druckt Sie die ascii-Tabelle.