Le réglage ibase
signifie que vous devez définir obase
cette même base. Expliquer vos exemples montrera ceci:
echo "ibase=F;obase=A;C0" | bc
Vous définissez bc
de considérer les numéros d'entrée comme représentés dans la base 15 avec le "ibase = F". "obase = A" définit les numéros de sortie à la base 10, qui est la valeur par défaut.
bc
lit C0 comme un nombre de base 15: C = 12. 12 * 15 = 180.
echo "ibase=F;obase=10;C0" | bc
Dans celui-ci, vous définissez l'entrée sur la base 15 et la sortie sur 10 - dans la base 15, donc la base de sortie est 15. L'entrée C0 dans la base 15 est la sortie C0 dans la base 15.
echo "ibase=16;obase=A;C0" | bc
Réglez l'entrée sur la base 16, la sortie sur la base 10 (A dans la base 16 est 10 dans la base 10).
C0 converti en base 10 est: 12 * 16 = 192
Ma règle personnelle est de définir d'abord obase, afin que je puisse utiliser la base 10. Ensuite, définissez ibase, en utilisant également la base 10.
Notez que bc
cela a une exception ironique: ibase=A
et obase=A
définit toujours l'entrée et la sortie sur la base 10. Depuis la bc
page de manuel:
Single digit numbers always have the value of the digit
regardless of the value of ibase.
Ce comportement est inscrit dans la spécification de bc
: à partir de la spécification OpenGroup 2004bc
:
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.
C'est pourquoi le ibase=F
paramètre a changé votre base d'entrée en base 15, et pourquoi j'ai recommandé de toujours définir la base en utilisant la base 10. Évitez de vous embrouiller.