การตั้งค่า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 เสมอจากbcman page:
Single digit numbers always have the value of the digit
regardless of the value of ibase.
ลักษณะการทำงานนี้เป็นที่ประดิษฐานในคุณสมบัติของbc: จาก2,004 OpenGroup 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 เสมอหลีกเลี่ยงความสับสน