Ustawienie ibase
oznacza, że musisz ustawić obase
w tej samej bazie. Wyjaśnienie przykładów pokaże to:
echo "ibase=F;obase=A;C0" | bc
Ustawiono bc
rozpatrywanie liczb wejściowych przedstawionych w podstawie 15 za pomocą „ibase = F”. „obase = A” ustawia liczby wyjściowe na podstawową 10, co jest wartością domyślną.
bc
odczytuje C0 jako liczbę podstawową 15: C = 12. 12 * 15 = 180.
echo "ibase=F;obase=10;C0" | bc
W tym ustawiasz wejście na bazę 15, a wyjście na 10 - w podstawie 15, więc podstawa wyjścia wynosi 15. Wejście C0 w bazie 15 to wyjście C0 w bazie 15.
echo "ibase=16;obase=A;C0" | bc
Ustaw wejście na bazę 16, wyjście na bazę 10 (A w bazie 16 to 10 w bazie 10).
C0 przeliczone na podstawę 10 wynosi: 12 * 16 = 192
Moją osobistą zasadą jest ustawienie najpierw obase, aby móc korzystać z bazy 10. Następnie ustaw ibase, również używając bazy 10.
Zauważ, że bc
ma ironiczny wyjątek: ibase=A
i obase=A
zawsze ustawia wejście i wyjście na bazę 10. Ze strony podręcznika bc
:
Single digit numbers always have the value of the digit
regardless of the value of ibase.
To zachowanie jest zapisane w specyfikacji bc
: Ze specyfikacji 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.
Dlatego ibase=F
ustawienie zmieniło bazę wejściową na bazę 15 i dlatego zalecałem, aby zawsze ustawiać bazę za pomocą bazy 10. Unikaj mylenia siebie.