Установка 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. Избегайте путаницы.