Configuración ibase
significa que necesita establecer obase
en esa misma base. Explicar sus ejemplos mostrará esto:
echo "ibase=F;obase=A;C0" | bc
Establece bc
considerar los números de entrada como se representa en la base 15 con el "ibase = F". "obase = A" establece los números de salida en base 10, que es el valor predeterminado.
bc
lee C0 como un número base 15: C = 12. 12 * 15 = 180.
echo "ibase=F;obase=10;C0" | bc
En este, establece la entrada en la base 15 y la salida en 10, en la base 15, por lo que la base de salida es 15. La entrada C0 en la base 15 es la salida C0 en la base 15.
echo "ibase=16;obase=A;C0" | bc
Establezca la entrada en la base 16, la salida en la base 10 (A en la base 16 es 10 en la base 10).
C0 convertido a base 10 es: 12 * 16 = 192
Mi regla personal es establecer obase primero, para que pueda usar la base 10. Luego establezca ibase, también usando la base 10.
Tenga en cuenta que bc
tiene una excepción irónica: ibase=A
y obase=A
siempre establece la entrada y la salida en la base 10. Desde la bc
página del manual:
Single digit numbers always have the value of the digit
regardless of the value of ibase.
Este comportamiento está consagrado en la especificación de bc
: De la especificación 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.
Es por eso que la ibase=F
configuración cambió su base de entrada a la base 15, y por eso recomendé establecer siempre la base usando la base 10. Evite confundirse.