Einstellung ibase
bedeutet, obase
dass Sie dieselbe Basis einstellen müssen . Wenn Sie Ihre Beispiele erläutern, sehen Sie Folgendes:
echo "ibase=F;obase=A;C0" | bc
Sie legen fest bc
, Eingabezahlen wie in Basis 15 mit "ibase = F" dargestellt zu berücksichtigen. "obase = A" setzt die Ausgangsnummern auf Basis 10, was die Standardeinstellung ist.
bc
liest C0 als Zahl zur Basis 15: C = 12. 12 * 15 = 180.
echo "ibase=F;obase=10;C0" | bc
In diesem Fall setzen Sie die Eingabe auf Basis 15 und die Ausgabe auf 10 - in Basis 15, sodass die Ausgabebasis 15 ist. Die Eingabe von C0 in Basis 15 ist die Ausgabe von C0 in Basis 15.
echo "ibase=16;obase=A;C0" | bc
Setzen Sie den Eingang auf Basis 16 und den Ausgang auf Basis 10 (A in Basis 16 ist 10 in Basis 10).
C0, das zu Basis 10 konvertiert wird, ist: 12 * 16 = 192
Meine persönliche Regel ist es, zuerst obase zu setzen, damit ich base 10 verwenden kann. Dann setze ibase, ebenfalls base 10.
Beachten Sie, dass bc
eine ironische Ausnahme hat: ibase=A
und obase=A
immer setzt die Ein- und Ausgabe Basis 10. Aus der bc
Manpage:
Single digit numbers always have the value of the digit
regardless of the value of ibase.
Dieses Verhalten ist in den folgenden Spezifikationen verankert bc
: Aus der OpenGroup- bc
Spezifikation von 2004 :
When either ibase or obase is assigned a single digit value from
the list in 'Lexical Conventions in bc', the value shall be assumed
in hexadecimal. (For example, ibase=A sets to base ten, regardless
of the current ibase value.) Otherwise, the behavior is undefined
when digits greater than or equal to the value of ibase appear in
the input.
Aus diesem Grund hat die ibase=F
Einstellung Ihre Eingabebasis in Basis 15 geändert, und ich habe empfohlen, die Basis immer mit Basis 10 festzulegen. Vermeiden Sie es, sich selbst zu verwirren.