การตั้งค่า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
man 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 เสมอหลีกเลี่ยงความสับสน