Налаштування 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. Вхід 0 в базі 15 - вихід C0 в базі 15.
echo "ibase=16;obase=A;C0" | bc
Встановіть вхід на базу 16, вихід на базу 10 (А в базі 16 - 10 в базі 10).
C0, перетворений на базу 10, дорівнює: 12 * 16 = 192
Моє особисте правило - спершу встановити obase, щоб я міг використовувати базу 10. Потім встановити ibase, також використовуючи базу 10.
Зауважте, що у bc
них є іронічний виняток: ibase=A
і obase=A
завжди встановлює вхід і вихід на базу 10. На bc
сторінці "man":
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. Не уникайте плутати себе.