Configuração ibase
significa que você precisa definir obase
na mesma base. Explicar seus exemplos mostrará isso:
echo "ibase=F;obase=A;C0" | bc
Você define os bc
números de entrada como representados na base 15 com o "ibase = F". "obase = A" define os números de saída para a base 10, que é o padrão.
bc
lê C0 como um número base 15: C = 12. 12 * 15 = 180.
echo "ibase=F;obase=10;C0" | bc
Neste, você define a entrada para a base 15 e a saída para 10 - na base 15, então a base de saída é 15. A entrada C0 na base 15 é a saída C0 na base 15.
echo "ibase=16;obase=A;C0" | bc
Defina a entrada para a base 16, a saída para a base 10 (A na base 16 é 10 na base 10).
C0 convertido na base 10 é: 12 * 16 = 192
Minha regra pessoal é definir obase primeiro, para que eu possa usar a base 10. Em seguida, defina ibase, também usando a base 10.
Observe que bc
há uma exceção irônica: ibase=A
e obase=A
sempre define entrada e saída como base 10. Na bc
página de manual:
Single digit numbers always have the value of the digit
regardless of the value of ibase.
Esse comportamento é consagrado na especificação de bc
: Na especificação do 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.
É por isso que a ibase=F
configuração mudou sua base de entrada para a base 15 e por que eu recomendei sempre definir a base usando a base 10. Evite se confundir.