เพราะเหตุใดทุบตีจึงคิดว่า 010 เป็น 8


17

ทำไมคนทุบตีจึงคิดเลข 010 = 8

x=010
echo $x
  010
echo $(( x+0 ))
  8
echo $(( x-2 ))
  6

ฉันคิดว่ามันอาจเป็นเลขฐานสอง แต่ 010 = 10 = 2 แล้วทำไมมันถึงได้ 8 และฉันจะทำให้มันคิดว่า 010 = 10 (และ 010 - 2 = 8) ได้อย่างไร


15
ชั้นนำ0บอกให้เป็นฐานแปด หากคุณเพียงแค่ทำx=10แล้วแล้วแสดงให้เห็นว่าecho $((x+0)) 10นอกจากนี้ยังมีความจำเป็นในการเสริมไม่มีกับใน$ ()
Terrance

2
ในตัวแยกวิเคราะห์ตัวเลขจำนวนมาก010หมายถึง 8 เพราะการใส่เครื่องหมาย0ด้านหน้าหมายถึงเลขฐานแปดเหมือนกับวิธีการใส่0xในบางภาษาหมายถึงเลขฐานสิบหก
Derek 朕會功夫

9
นี่เป็นสิ่งสำคัญที่ควรทราบเมื่อเขียนโปรแกรม ในภาษาส่วนใหญ่0ทริกเกอร์ฐานแปดฐาน0xสิบหกและ0bไบนารี
เซท

คำอธิบายลงคะแนนได้หรือไม่
ทิม

3
@ ทันเวลาทำไมถึงไม่เป็น 8? ;-) โอ้ไม่ใช่ downvote ของฉัน แต่อาจเป็นเพราะมันธรรมดาเกินไป มันเป็นพฤติกรรมปกติ
Rinzwind

คำตอบ:


42

ลำดับตัวเลขที่ขึ้นต้นด้วย a 0จะถูกตีความเป็นตัวเลขฐานแปด
Octal 10= 8ทศนิยม

ในการรับทุบตีเพื่อใช้เป็นทศนิยมให้ลบศูนย์นำหน้าหรือบังคับทศนิยมด้วย:

N=010
N=$((10#$N))

โดยทั่วไปใช้งานได้กับฐานทั้งหมดเพียงแทนที่10ด้วยฐานที่คุณต้องการ:

N=[base#]n

แก้ไขคำถามด้วยสองวิธีในการแก้ปัญหา
Pabi

1
@Tim ทำเช่นนั้นคุณสามารถใช้ $ {N%?} เพื่อสับตัวเลขหลักสุดท้ายแล้ว $ {N: -} เพื่อแทนที่ช่องว่างด้วย 0
Random832

@ เวลาถ้าอย่างนั้นฉันไม่สามารถหาวิธีได้ $ {$ {N%?}: - 0} ใช้งานได้ใน zsh แต่ไม่ใช่ใน bash หรือ ksh (นอกจากนี้:-ในความคิดเห็นของฉันข้างต้นควรจะได้รับ:-0}
Random832

คุณควรรวมไว้ในคำตอบของคุณว่าคุณสามารถบังคับฐานใด ๆ ด้วย " form [base #] n โดยที่ base คือตัวเลขทศนิยมระหว่าง 2 ถึง 64 ที่แสดงถึงฐานเลขคณิตและ n เป็นตัวเลขในฐานนั้น " source: bash ref
djeikyb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.