Cài đặt ibase
nghĩa là bạn cần đặt obase
trong cùng một cơ sở. Giải thích các ví dụ của bạn sẽ cho thấy điều này:
echo "ibase=F;obase=A;C0" | bc
Bạn đặt bc
để xem xét các số đầu vào như được trình bày trong cơ sở 15 với "ibase = F". "obase = A" đặt các số đầu ra thành cơ sở 10, là mặc định.
bc
đọc C0 dưới dạng số 15 cơ sở: C = 12. 12 * 15 = 180.
echo "ibase=F;obase=10;C0" | bc
Trong phần này, bạn đặt đầu vào thành cơ sở 15 và đầu ra thành 10 - trong cơ sở 15, vì vậy cơ sở đầu ra là 15. Đầu vào C0 trong cơ sở 15 là đầu ra C0 trong cơ sở 15.
echo "ibase=16;obase=A;C0" | bc
Đặt đầu vào thành cơ sở 16, đầu ra thành cơ sở 10 (A trong cơ sở 16 là 10 trong cơ sở 10).
C0 được chuyển đổi thành cơ sở 10 là: 12 * 16 = 192
Quy tắc cá nhân của tôi là đặt obase trước, để tôi có thể sử dụng cơ sở 10. Sau đó, đặt ibase, cũng sử dụng cơ sở 10.
Lưu ý rằng bc
có một ngoại lệ mỉa mai: ibase=A
và obase=A
luôn đặt đầu vào và đầu ra thành cơ sở 10. Từ bc
trang man:
Single digit numbers always have the value of the digit
regardless of the value of ibase.
Hành vi này được quy định trong đặc tả của bc
: Từ đặc tả 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.
Đó là lý do tại sao ibase=F
cài đặt thay đổi cơ sở đầu vào của bạn thành cơ sở 15 và tại sao tôi khuyên bạn luôn luôn đặt cơ sở sử dụng cơ sở 10. Tránh tự gây nhầm lẫn.