Установка ibaseозначает, что вам нужно установить obaseв той же базе. Объяснение ваших примеров покажет это:
echo "ibase=F;obase=A;C0" | bc
Вы bcдолжны учитывать входные числа, представленные в базе 15 с «ibase = F». «obase = A» устанавливает выходные значения в базу 10, которая используется по умолчанию.
bc читает C0 как базовое число 15: C = 12. 12 * 15 = 180.
echo "ibase=F;obase=10;C0" | bc
В этом случае вы устанавливаете вход для базы 15, а выход для 10 - для базы 15, поэтому выходной базой является 15. Вход C0 в базе 15 - это выход C0 в базе 15.
echo "ibase=16;obase=A;C0" | bc
Установите вход на базу 16, выход на базу 10 (A в базе 16 - 10 в базе 10).
C0, преобразованный в основание 10: 12 * 16 = 192
Мое личное правило - сначала установить obase, чтобы я мог использовать базу 10. Затем установите ibase, также используя базу 10.
Обратите внимание, что bcимеет ироническое исключение: ibase=Aи obase=Aвсегда устанавливает ввод и вывод в базу 10. На bcстранице руководства :
Single digit numbers always have the value of the digit
regardless of the value of ibase.
Это поведение закреплено в спецификации bc: Из спецификации OpenGroup 2004 годаbc :
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.
Вот почему ibase=Fнастройка изменила вашу базу ввода на базу 15, и поэтому я рекомендовал всегда устанавливать базу, используя базу 10. Избегайте путаницы.