เรียนรู้เลขฐานสิบหกทำไม [ปิด]


28

ฉันได้เรียนการเขียนโปรแกรมอินโทรค่อนข้างน้อยในสมัยของฉันส่วนใหญ่เพียงเพื่อให้เท้าของฉันเปียกในการเขียนโปรแกรมทุกชนิดที่ฉันพบ ไม่น่าแปลกใจที่เกือบทุกคลาสจะทำงานในรูปแบบเดียวกันนั่นคือบทนำเกี่ยวกับฮาร์ดแวร์บทนำของซอฟต์แวร์จากนั้นคุณจะเข้าสู่การเขียนโปรแกรมจริง ในขณะที่การทำความเข้าใจว่าฮาร์ดแวร์และซอฟต์แวร์ทำงานอย่างไรมีความสำคัญมากฉันมักจะสับสนกับหัวข้อหนึ่งที่อยู่ในทุกหลักสูตร

ในส่วนของซอฟต์แวร์ที่ฉันพบโดยไม่ล้มเหลวพวกเขาให้ความสำคัญอย่างมากกับการรู้หนังสือในระบบเลขฐานสองเลขฐานสิบหกและบางครั้งแม้แต่ระบบเลขฐานแปด ฉันเข้าใจว่าเป็นการดีที่จะเข้าใจสิ่งเหล่านี้คืออะไรและคอมพิวเตอร์จะตีความได้อย่างไร แต่ฉันไม่เคยพบว่าตัวเองต้องการรู้วิธีการอ่านและเขียนระบบตัวเลขเหล่านี้ จริงๆแล้วครั้งเดียวที่ฉันได้เห็นบางสิ่งที่นอกเหนือจากฐาน 10 นั้นใช้สำหรับสีใน CSS ซึ่งง่ายกว่าถ้าคุณใช้บางอย่างเช่น www.colorpicker.com

ฉันเพิ่งรู้การใช้งานที่ยอดเยี่ยมของระบบตัวเลขที่ไม่ใช่ฐาน 10 เหล่านี้ในโลกแห่งการเขียนโปรแกรมหรือเป็นเพียงประเพณีเก่า ๆ ที่รวมหัวข้อเหล่านี้ไว้ในตำราการเขียนโปรแกรมทั้งหมดหรือไม่? ใครบ้างมีตัวอย่างที่ดีของที่โปรแกรมเมอร์เฉลี่ยจะใช้เลขฐานแปดจริงหรือไม่?


1
ใครบ้างมีตัวอย่างที่ดีของที่โปรแกรมเมอร์โดยเฉลี่ยจะใช้เลขฐานแปดจริงหรือไม่? ใช่ถ้าคุณเคยพบว่าตัวเองกำลังเขียนซอฟต์แวร์ที่เกี่ยวข้องกับอุตสาหกรรมการบินคุณน่าจะพบรหัส Transponder ซึ่งเป็นเลขฐานแปด 4 หลัก en.wikipedia.org/wiki/Transponder_%28aviation%29
Ben Cottrell

คำตอบ:


14

คำตอบทั้งหมดนั้นดี แต่พวกเขาไม่ได้พูดถึงสิ่งที่ฉันคิดว่าเป็นส่วนที่มีค่าที่สุด การเรียนรู้ที่จะ "คิด" ในฐานที่ต่างกันทำให้คุณคล่องแคล่วมากขึ้นด้วยวิธีที่คอมพิวเตอร์จัดการกับตัวเลข

ถ้าคุณต้องการที่จะเก็บสตริงของตัวอักษรตัวพิมพ์เล็กที่บรรจุค่อนข้างดีคุณจะทำอย่างไร?

มีตัวอักษรตัวพิมพ์เล็ก 26 ตัวซึ่งแปลได้อย่างง่ายดายในช่วง 0-31 ซึ่งเป็นตัวเลข 5 บิตคุณสามารถแพ็ค 6 5 บิตตัวเลขลงในฟิลด์ 32 บิต (int?) และยังเหลือพอ สำหรับเครื่องหมายวรรคตอนไม่กี่

ฉันไม่ได้บอกว่า hex ช่วยอะไรแบบนี้ แต่เข้าใจว่าการแปลงตัวเลขทำได้อย่างไร

อีกกรณีหนึ่งบ่อยครั้งคุณใช้ base-64 ในการส่งผ่านตัวเลขที่ค่อนข้างยาวใน ASCII คุณจะรู้วิธีการใช้งานนี้หรือไม่? ทำไมจึงต้องใช้อย่างนั้น คุณรู้หรือไม่ว่าสิ่งที่คุณพิมพ์ทุกครั้งที่คุณพิมพ์ "CD KEY" ลงในกล่องลงทะเบียนของเกม

นอกจากนี้เพื่อความสนุกเล่นรอบกับฐาน 12 ในขณะที่บางครั้ง คณิตศาสตร์กลายเป็นเรื่องที่น่าสนใจจริงๆในฐาน 12 (ฐาน 10 เป็นข้อเปรียบเทียบที่โง่ฉันหวังว่าเราจะพัฒนาด้วย 6 นิ้ว - เราอาจเป็นทศวรรษข้างหน้าในความเข้าใจคณิตศาสตร์ของเรา) มนุษย์ยุคแรกที่ฉลาดมากบางคนใช้ฐาน 12 เพื่อพัฒนานาฬิกา

ในฐาน 10 เรามีหมายเลข "Cool" 3 หมายเลขที่สร้างรูปแบบง่าย ๆ 2, 5 และ 9 กับ 8, 6 และ 4 ในรูปของตัวเลข "Minor" ในฐาน 12 คุณมี 2,3,4,6,11 เป็นตัวเลข "เด็ด" กับ 8,9 และ 10 เป็นตัวเลขยอดเยี่ยม "ไมเนอร์" ซึ่งหมายความว่าถ้าเราใช้ฐาน 12 เราจะจำรูปแบบตัวเลขได้ดีกว่ามาก เพราะเราจะเห็นพวกเขาตลอดเวลา

นอกจากนี้ไบนารี คุณสามารถนับบนมือข้างหนึ่งถึง 32 - ฉันทำมันค่อนข้างน้อยมามีประโยชน์บางครั้งเมื่อการนับถึง 5 เพียงไม่ตัด :)

ไบนารีเป็นเกมที่สนุก แต่มันแปลได้ไม่ดี เมื่อคุณเก่งด้วย hex คุณเริ่มเห็น "A" เป็น 1010 และ "5" เป็น 0101 และสิ่งเหล่านี้เริ่มสำคัญมาก หากคุณมีบิตฟิลด์ที่คุณต้องการแยกบิตที่ 6: 00100000 คุณจะทำอะไร "และ" ด้วย? คุณควรรู้ว่ามันคือ 0x20

หากคุณเห็นโค้ดที่เป็น 0x0600 บิตใดที่จะถูกแยก? คุณควรรู้โดยไม่ต้องคิดเลย - คุณควรอ่านว่าจริง ๆ แล้วราวกับว่ามันถูกเขียนขึ้น 0000011000000000 (แต่อ่านง่ายขึ้นเพราะคุณไม่ต้องนับศูนย์)

ทำไมคุณต้องการ จำกัด สมองและความสามารถในการประมวลผลข้อมูล?


อันที่จริง, นาฬิกาถูกพัฒนาขึ้นในbase60
เดนิสเดอเบอร์นาดี

@ Denis ฉันอยู่ภายใต้ความประทับใจว่าทฤษฎีปัจจุบันคือพวกเขาได้รับการพัฒนาโดยคนที่นับในฐานสิบสองที่หายไปจากคนโง่ที่ไม่สามารถคิดว่าผ่านนิ้วมือของพวกเขา 60 เป็นเพียง 12 หน่วยงานแบ่งออกเป็นกลุ่มขึ้น 5 และดูเหมือนว่าหลังการสับจากฐาน 10 เสียงคำราม :)
บิล K

อาจจะ. พูดตามตรงฉันไม่ได้เป็นผู้เชี่ยวชาญ ความคิดเห็นของคุณนำความทรงจำที่ลืมไปนาน ๆ กลับมา ฉันยังจำได้ว่ามุมที่วัดใน 360 องศานั้นมาจากฐาน -60 (และจากนักประดิษฐ์ชาวบาบิโลนคนเดียวกัน) แต่เมื่อคุณชี้ให้เห็นว่ามันอาจเป็นได้ว่าฐาน 10-grunts จมอยู่กับสิ่งที่เดิมเป็นนักคณิตศาสตร์พื้นฐาน -12 :-) ทีนี้ลองคิดดูถ้าเรานับในฐาน -20 เหมือนที่ชาวอเมริกันอินเดียนทำ :-D
เดนิสเดอเบอร์นาดี

44

เรียนรู้อะไร คุณต้องเข้าใจฐานจำนวนที่แตกต่างกันเพื่อให้เป็นโปรแกรมเมอร์ที่มีความสามารถ แต่เกี่ยวกับเลขฐานสิบหกมีน้อยที่จะเรียนรู้ยกเว้น ABCDEF มาหลังจาก 9


8
OP อาจหมายถึงความสามารถในการโอนย้ายจิตใจไปยังฐาน 10 จากฐานอื่น ๆ นี่อาจเป็นทักษะที่มีประโยชน์ ณ จุดหนึ่งและอาจยังคงเป็นโปรแกรมเมอร์ระดับต่ำบางประเภท แต่ส่วนใหญ่ไม่เกี่ยวข้องในปัจจุบัน ตัวอย่างเช่นคุณสามารถทำการแปลงเป็นกลุ่มได้เล็กน้อย
Rein Henrichs

ถูกต้อง. ฉันควรจะชัดเจนมากขึ้น
jwegner

2
@Rein ฉันไม่เคยทำได้ดีมาก (ฉันต้องทำคณิตศาสตร์ในหัวของฉัน) ดังนั้นฉันจึงไม่สามารถพูดได้ อย่างไรก็ตามฉันเคยมีจิตใจสามารถเปลี่ยนจาก hex เป็นภาษาแอสเซมบลี Z80 ซึ่งเป็นสิ่งที่มีประโยชน์ที่สามารถทำได้ในเวลานั้น ฉันสงสัยว่าความสามารถในการเปลี่ยนจากแอสเซมบลี hex ไปเป็น 80x86 (หรืออะไรก็ตาม) ยังคงมีประโยชน์สำหรับโปรแกรมเมอร์ที่ทำงานในปัจจุบัน
Neil Butterworth

1
@Neil Butterworth: 8080 opcodes ให้ความรู้สึกที่ถูกต้องในรูปแบบเลขฐานแปดจริง ๆ ถ้าหน่วยความจำทำหน้าที่ หน่วยความจำของฉันมืดครึ้มเกี่ยวกับวิธีการที่นำไปใช้กับส่วนขยาย Z80
David Thornley

1
@ Neil: ฉันคิดว่าส่วนที่สำคัญคือคำแนะนำการย้ายลงทะเบียนเพื่อลงทะเบียนซึ่งปรากฏเป็น 01xxxyyy ในรูปแบบบิตโดยที่ xxx คือปลายทางและแหล่ง yyy ฉันไม่รู้ว่ามีความสำคัญแปดด้านอื่น ๆ หรือไม่
David Thornley

18

ใครบ้างมีตัวอย่างที่ดีของที่โปรแกรมเมอร์เฉลี่ยจะใช้เลขฐานแปดจริงหรือไม่?

Octal? ไม่ใช่โดยทั่วไปไม่ใช่ด้วยข้อยกเว้นสำหรับสิทธิ์ * nix

เลขฐานสิบหก? พนันได้เลย. คุณกำลังเพิกเฉยต่อพวกเราจำนวนมากที่กำลังสับบิตอยู่รอบ ๆ ระบบฝังตัวดูโปรโตคอลหรือรูปแบบไฟล์ในระดับบิตและอื่น ๆ แต่ถ้าคุณอยู่ไกลจากแอปพลิเคชันที่ทำจากโลหะหรือทำงานบนเว็บ

ตัวอย่าง: การกำหนดค่าลงทะเบียนกับไมโครคอนโทรลเลอร์และสิ่งที่คล้ายกัน

ใช้หมายเลข 54312 นำโดยการกดปุ่มสุ่ม คุณสามารถบอกได้ว่าบิตใดถูกตั้งค่าไว้? อย่างน้อยฉันก็ไม่สามารถทำได้ เลขฐานสิบหกที่เท่ากันคือ 0xd428 ที่ในอีกทางหนึ่งบอกฉันทันทีว่ารูปแบบบิตที่ฉันดูคือ 1101 0100 0010 1,000 มันมีโครงสร้างเชิงตรรกะสำหรับสิ่งนั้นและคุณพบว่าตัวเองต้องการสิ่งนี้ตลอดเวลาเมื่อคุณอยู่ใกล้กับ โลหะ. สมมุติว่าตัวเลขด้านบนคือสิ่งที่ฉันได้รับจากการรีเซ็ตจาก mcu และฉันต้องการบิต 7 และ 9 เซตด้วยเหตุผลบางอย่าง ในฐานสิบหกฉันสามารถเห็นได้อย่างง่ายดายว่าจำนวนผลลัพธ์ควรเป็น 0xd6a8 แต่เป็นทศนิยม? นั่นคือ 54952 ไม่มีที่ไหนใกล้ถ้าคุณถามฉัน แน่นอนว่ามันเป็นเรื่องของการเพิ่มมูลค่า 640 แต่มันเจ็บปวดมากกว่าที่จะคิดออก แน่นอนว่าในทางปฏิบัติเราอาจเปลี่ยนบิตไปยังตำแหน่งที่ถูกต้องและหรือด้วยค่าดั้งเดิม แต่คุณอาจต้องการทราบว่าการแทนสุดท้ายคืออะไร


1
คำถามประเภทใดที่ถามว่า "ทำไมฉันต้องสนใจบิตที่ตั้งค่าไว้" สำหรับบางแอปพลิเคชั่น (มากที่สุดหรือมากที่สุด) สิ่งนี้ไม่เกี่ยวข้องกัน
Neil Butterworth

10
ตกลง - สมมติว่าเรากำลังพูดถึงการพัฒนาในระดับสูง ระดับต่ำไม่ว่าจะมีการตั้งค่าบิตเฉพาะหรือล้างไม่เพียง แต่อาจจะบางครั้งจะตรวจสอบว่ารองเท้าไมโครเลือดที่ทั้งหมดหรือหากอุปกรณ์ต่อพ่วงบางอย่างที่คุณต้องการได้รับพลังงานหรือถ้ามันทำงานที่ความเร็วสัญญาณนาฬิกาของ x มากกว่า y . นั่นเป็นเพียงจุดเริ่มต้นของมันและถ้าคุณจัดการกับการพัฒนาแบบนี้โดยพื้นฐานแล้วบิตเดียวก็สำคัญ บางครั้งก็เยอะ แต่อีกครั้งมันขึ้นอยู่กับโดเมนของคุณฉันกำลังพูด อย่าลืมโลกฝังตัว =)
n42

1
+1 - ยิ่งใกล้กับเครื่องที่คุณได้รับยิ่งคุณจำเป็นต้องใช้ฐานที่แตกต่างกัน มันไม่ได้ฝังเพียง ภาษาส่วนใหญ่มีค่าสถานะบิตและมักจะเขียนเป็นเลขฐานสิบหกด้วยเหตุผลที่ชัดเจน ในทางกลับกันมันค่อนข้างไม่มีจุดหมายที่จะสอนในหลักสูตรการเขียนโปรแกรมแรก แต่หลักสูตรการเขียนโปรแกรมแรกส่วนใหญ่นั้นไม่มีจุดหมายอย่างเป็นธรรม โปรแกรมเมอร์เกือบทั้งหมดสอนตัวเองใช่มั้ย

1
@ รสชาติ: เป็นเพราะเลขฐานสิบหกง่ายต่อการอ่าน ฉันสามารถทำให้ความรู้สึกของค่าเลขฐานสิบหก 8 หลักเร็วกว่าค่าเลขฐานสอง 32 หลัก
Steve S

2
@Steve S: จริงๆแล้วฉันสงสัยว่าเป็นเพราะเราเป็นคนขี้เกียจเช่นกัน .. 0x80 สั้นกว่าการเขียนมากกว่า 0b10000000 แต่ฉันเห็นด้วย ฉันยังยอมรับด้วยว่ามันไม่มีความหมายส่วนใหญ่ในหลักสูตรการเขียนโปรแกรมแรก แต่คุณอาจผลักมันให้เป็นคณิตศาสตร์แบบแยกการเขียนโปรแกรมแบบเรียลไทม์การจัดระเบียบคอมพิวเตอร์และสิ่งที่คล้ายกัน
n42

12

ใครบ้างมีตัวอย่างที่ดีของที่โปรแกรมเมอร์เฉลี่ยจะใช้เลขฐานแปดจริงหรือไม่?

หากคุณตั้งค่าการอนุญาตสำหรับไฟล์ใน Unix (หรือ Linux) คุณจะใช้หมายเลขฐานแปด 3 หลัก ตัวเลขแรกคือสิทธิ์ของผู้ใช้ที่สองคือสิทธิ์ของกลุ่มและตัวเลขสุดท้ายคือสิทธิ์ที่ทุกคนได้รับ

ฉันต้องเข้าใจความจริงนี้ในรหัสที่ฉันเขียนเมื่อสัปดาห์ที่แล้ว

หากคุณดูผลลัพธ์ของอัลกอริธึมการแปลงค่ามาตรฐานเช่น MD5 คุณจะพบว่าพวกมันเขียนด้วยเลขฐานสิบหก ฉันเคยเห็นหลายกรณีที่นำไปสู่การคำนวณทางคณิตศาสตร์ในฐานที่ผิดปกติ

หากคุณต้องการที่จะเข้าใจว่าจุดลอยตัวนั้นมีการแสดงผลภายในอย่างไรและเหตุใดทำไม 1/10 จึงไม่แสดงอย่างแม่นยำคุณจำเป็นต้องเข้าใจวิธีการคำนวณทางคณิตศาสตร์ในฐานที่แตกต่างกันอย่างแน่นอน นี่คือความรู้ลึกลับจนกระทั่งวันที่มันลับคุณไปทางด้านหลังและทันใดนั้นคุณต้องเข้าใจมันอย่างเร่งด่วน

และมีตันของกรณีอื่น ๆ ที่คุณจะได้พบกับธรรมชาติไบนารีพื้นฐานของข้อมูลภายในของคอมพิวเตอร์การปลูกพืชขึ้น แน่นอนถ้าคุณเพิ่งจะเขียนเว็บไซต์ CRUD คุณอาจจะไม่เจอพวกเขาเลยเพราะมันเกิดขึ้นในระดับที่คนอื่นได้จัดการไปแล้ว


4
* การอนุญาตห้ามไม่ใช่เลขฐานแปดที่แท้จริง คุณไม่ทำการคำนวณทางคณิตศาสตร์ด้วยการรับรองเหล่านี้ อย่างดีที่สุดพวกเขาเป็นตัวแทนแปดของหน้ากากไบนารี
Joel Etherton

@Joel Etherton: เมื่อคุณได้รับการอนุญาตจาก stat file พวกเขาจะเข้ามาเป็นตัวเลขซึ่งโดยปกติแล้วจะแสดงในฐาน 10 หากคุณไม่เข้าใจการแปลงเป็น / จากฐานแปดตัวเลขเหล่านั้นยากที่จะเข้าใจ ฉันกำลังเขียนเอกสารที่ต้องอธิบายข้อเท็จจริงนี้ มีการคำนวณทางคณิตศาสตร์มากมาย
btilly

@btilly: คุณเข้าใจผิดในสิ่งที่ฉันพูด หากคุณตั้งค่าการอนุญาตในไฟล์เป็น 755 คุณจะไม่ต้องเพิ่มสิ่งนี้ในทุกสิ่ง มันเป็นเพียงหน้ากากที่อธิบายการอนุญาตรวมกัน แน่นอนว่าคุณต้องจำไว้ว่ามันหมายถึง (4 + 2 + 1) (4 + 0 + 1) (4 + 0 + 1) แต่สิ่งเหล่านี้ยังคงเป็นเพียงการนำเสนอของไบนารีมาสก์ คุณหมายถึงอะไรเมื่อคุณพูดว่า "file stat" ฉันไม่เคยเห็นสถิติไฟล์สำหรับการอนุญาตที่ส่งมอบในฐาน 10 (ยึดตามตัวอย่างนั้นอย่างเคร่งครัด)
Joel Etherton

1
@ Joel Etherton: ลองperl -le '@stat = stat(shift); print $stat[2]' some_fileแล้วคุณจะได้สถิติเป็นตัวเลขในฐาน 10 คุณต้องผ่านมันเข้าไปใน Perl chmodด้วยวิธีเดียวกัน ดังนั้นจึงเหมาะสมที่จะเก็บหมายเลขนั้นไว้ในฐานข้อมูล ณ จุดที่ฉันต้องบันทึกว่าตัวเลขเหล่านั้นเกี่ยวข้องกับการอนุญาต Unix ที่คุ้นเคยมากขึ้นหรือไม่ อย่างที่ฉันพูดนี่ไม่ใช่ตัวอย่างสมมุติ
btilly

@Joel Etherton: บอกว่าคุณมีไฟล์ที่มีสิทธิ์เป็น 419 (ฐานสิบ) คุณต้องการทำให้ไฟล์ที่ผู้ใช้สามารถเรียกใช้งานได้ แต่ไม่สามารถอ่านได้ทั่วโลก คุณต้องการแก้ไขหมายเลขอย่างไร ค่าที่ส่งคืนในการเรียกใช้ C stat () เป็นแบบ int วิธีที่คุณเลือกพิมพ์ก็คืออีกเรื่องหนึ่ง
Vatine

9

หวังว่าในโลกแห่งความเป็นจริงคุณจะไม่ถูกถามเกี่ยวกับการแปลง Hex เป็นไบนารีให้เป็นทศนิยม คุณจะมีเครื่องมือต่าง ๆ เพื่อแปลงตามที่คุณต้องการ

ฉันเห็นด้วยที่คุณควรมีความเข้าใจในสิ่งที่เกิดขึ้น แต่ทำไมจำเมื่อคุณสามารถค้นหาได้หรือไม่

อย่างไรก็ตามฉันพบว่ามีประโยชน์ในการจำหมายเลขคีย์ (สำหรับฉัน 0x64 = 100, 0xFF = 255, 0xFFFF = 65535 ฯลฯ ) เพราะพวกเขามีจำนวนมาก

ฉันจะพูดสิ่งที่ 8675309 เป็นเลขฐานสองฐานสิบหกและเลขฐานแปดได้อย่างไร ไม่ แต่ฉันสามารถเปิดเครื่องมือที่สามารถทำได้เมื่อต้องการ


3
คุณลืม 57005 ที่ใช้กันทั่วไปเป็น constelvis = 57005;
Bevan

5

สิ่งเดียวที่ฉันเคยใช้ octal คือสิทธิ์ของไฟล์ในระบบยูนิกซ์

เลขฐานสิบหกและเลขฐานสองมีประโยชน์มากหากคุณทำงานใกล้กับโปรโตคอลลวดหรือใกล้กับการถ่ายโอนข้อมูลโลหะ การไหลของข้อมูลโดยพื้นฐานในระบบไบนารี่ซึ่งจะแทนด้วยการตอดในรูปแบบเลขฐานสิบหก

คุณจะพบว่าแผ่นข้อมูลมักจะพูดถึงค่าเลขฐานสิบหกดังนั้นจึงเป็นการดีกว่าที่จะแสดงค่าเป็นรหัสตามที่ปรากฏในแผ่นข้อมูล

ถ้าคุณใช้อย่างใดอย่างหนึ่งมากคุณจบลงค่อนข้างมีความเชี่ยวชาญในการแปลงและจากทศนิยมในหัวของคุณอย่างน้อยสำหรับค่าทั่วไป

ทั้งหมดที่กล่าวมา; ฉันสงสัยว่าความเน้นหนักส่วนใหญ่เป็นประวัติศาสตร์ อย่างที่คุณบอกว่ามีโปรแกรมเมอร์มากมายที่ไม่ต้องการอะไรนอกจากทศนิยม


5

คุณกำลังถามว่าทำไมเรียนรู้พลังของการแทนตัวเลข 2 ตัว?

คอมพิวเตอร์ทำจากวงจรกระแสไฟฟ้าไหลผ่านวงจรในสองระดับที่ต่างกันสูงและต่ำเพื่อแสดงถึงสองระดับของกระแสเราใช้เลขฐานสองเพราะพวกเขาสามารถถือสองรัฐทั้งหนึ่ง (สูง) หรือศูนย์ (ต่ำ)

ตัวเลขไบนารีรูปแบบรูปแบบ ตัวอย่างเช่นถ้าเพียงวิธีเดียวที่คุณและผมสามารถพูดคุยผ่านออกวงจรเราสามารถสร้างว่าถ้าคุณต้องการที่จะส่งฉันตัวอักษร A คุณจะส่งรูปแบบไบนารี: 1000001. ตั้งแต่ฉันขี้เกียจ , ฉันไม่ต้องการที่จะจดจำ 7 หลักเจ็ด แต่ฉันจะใช้พลังของระบบเลข 2 เพื่อเป็นตัวแทนของเลขฐานสองขนาดใหญ่ให้เล็กลง ฉันสามารถใช้ 8 (2 ^ 3) หรือ 16 (2 ^ 4)

ในขณะที่คุณสามารถเห็นฮาร์ดแวร์คอมพิวเตอร์และซอฟต์แวร์ส่วนใหญ่ใช้การแทนแบบไบนารี่และเราใช้พลังของการแทน 2 แบบเช่นฐานแปดและฐานสิบหกเพื่ออ่านการแทนค่าไบนารี่ในวิธีที่มีประสิทธิภาพและไม่เจ็บปวด

ตอนนี้เป็นตัวอย่างของโปรแกรมเมอร์โดยเฉลี่ยที่ต้องการเข้าใจพลังของการแทน 2 ค่า:

  1. ASCII
  2. Unicode
  3. ทำความเข้าใจเกี่ยวกับการเขียนโปรแกรมการจัดการหน่วยความจำ (stack, heap, memory address, core dumps)
  4. แก้จุดบกพร่อง
  5. การอ่านข้อมูลไบนารีส่วนใหญ่จะทำในโปรแกรมแก้ไข Hex

ตอนนี้สองเซ็นต์สุดท้ายของฉันฉันมั่นใจมากว่าคุณสามารถเรียนรู้ได้อย่างรวดเร็วพลังของตัวแทน 2 (เนื่องจากคุณได้จัดการหลักสูตรการเขียนโปรแกรมบทนำ) แล้วคุณอาจลืมการแปลง แต่มันไม่ควรเป็นแนวคิดต่างประเทศถ้าคุณต้องการ เป็นโปรแกรมเมอร์ทั่วไป


3

ฉันไม่เคยใช้ฐานแปด แต่ไม่ใช่เรื่องผิดปกติที่จะเห็นเลขฐานสิบหกในตัวดีบักเกอร์และในบางครั้งมันก็สมเหตุสมผลกว่าที่จะใช้ฐานสิบหกในซอร์สโค้ดของคุณ (ปกติแล้วเนื่องจากข้อมูลพื้นฐานคือค่าสถานะบิต)


3

ฉันไม่รู้ว่าวันนี้ต้องการมากหรือไม่ แต่หลายปีก่อนตอนที่ฉันเป็นโปรแกรมเมอร์ระบบการที่สามารถอ่านและเข้าใจ hex เป็นสิ่งจำเป็น ฉันจะนำเสนอด้วยการถ่ายโอนข้อมูลที่จัดเก็บข้อมูล (ทั้งหมดในฐานสิบหก) และถอดรหัสการเป็นตัวแทน hex กลับไปเป็นภาษา IBM Assembly หลังจากทำเช่นนั้นชั่วครู่หนึ่งคุณก็สามารถทำมันได้โดยตรง - อ่าน hex และเขียนแอสเซมบลีที่เทียบเท่า มีประโยชน์มากสำหรับการแก้ไขข้อบกพร่อง การเพิ่มและลบค่าฐานสิบหกมีประโยชน์สำหรับการคำนวณออฟเซ็ตจากการลงทะเบียนฐาน

ฉันสงสัยว่าในทางปฏิบัติตอนนี้มีความต้องการเล็กน้อย แต่ความรู้เกี่ยวกับมันอาจจะเป็นสิ่งที่ไม่ดี


นั่นคือที่ฉันได้รับทักษะ hex ของฉันด้วย ต่อมารุนแรงขึ้นเมื่อฉันถูกบังคับให้แก้จุดบกพร่องรหัสโดยไม่ต้องดีบักสัญลักษณ์ใน VAX / VMS (เราส่งรหัสให้กับลูกค้าโดยไม่มีข้อมูลสัญลักษณ์ใด ๆ ) ทุกวันนี้ฉันไม่ค่อยได้ใช้มันถึงแม้ว่าเราจะเข้ารหัสข้อมูลบางอย่างใน URL ที่เป็นเลขฐานสิบหกและในบางครั้งมันก็มีประโยชน์มากที่จะสามารถถอดรหัสได้ทันที
TomG

3

มันไม่เกี่ยวกับการเป็น "คล่องแคล่ว" ในการอ่านเลขฐานสอง / เลขฐานสิบหก แต่สะดวกสบายพอที่คุณจะสามารถแปลงจิตได้อย่างรวดเร็วเมื่อคุณพบพวกเขา ลองนึกภาพการเขียนโปรแกรมโดยไม่รู้สึกสะดวกสบายกับเลขคณิตอย่างง่ายและคุณต้องไปที่เครื่องคิดเลขทุกครั้งที่คุณต้องคูณด้วยสอง

เลขฐานสิบหก / ไบนารีมีความสำคัญเนื่องจากนี่เป็นภาษาที่คอมพิวเตอร์พูดคุณจะต้องเผชิญกับมันในสถานที่ต่าง ๆ โดยเฉพาะอย่างยิ่งเมื่อต้องผ่านการแก้จุดบกพร่องแบบฝึกหัดและข้อมูลของคุณอยู่ในรูปแบบเลขฐานสิบหก

ฉันยังจะเน้นถึงความสำคัญในการทำความเข้าใจฐาน -2 ในบริบทของประเภทตัวเลขที่แตกต่างกันที่มีการแสดงภายในและวิธีการทำงานของเลขคณิต ด้วยสิ่งนี้คุณจะมีความเข้าใจที่ดีขึ้นเกี่ยวกับเวลาและวิธีจัดการกับประเด็นการปัดเศษทศนิยมและจำนวนเต็มล้นตัวอย่างเช่น

เป็นอีกตัวอย่างหนึ่งการดำเนินการระดับบิตและแฟล็กบิตยังคงแพร่หลายในการเขียนโปรแกรมและนี่เป็นอีกสถานที่ที่ความเข้าใจพื้นฐาน -2 มีความสำคัญ


2

จริงๆแล้วครั้งเดียวที่ฉันเห็นบางอย่างที่ไม่ใช่ฐาน 10 สำหรับสีใน CSS

คุณไม่ต้องค้นหาตัวละครใน ชาร์ตโค้ด Unicodeหรือไม่? ไม่เคยเห็น URL ที่มี%20อยู่หรือ ไม่เคยใช้GUIDหรือ ไม่เคยเห็นที่อยู่ IPv6หรือ ไม่เคยเขียนBLOBตัวอักษรใน SQL หรือไม่? ไม่เคยดูไฟล์ในเครื่องมือแก้ไข hex หรือไม่ มีสิ่งต่าง ๆ ที่เกี่ยวข้องกับคอมพิวเตอร์จำนวนมากซึ่งได้รับการจดบันทึกเป็น hex

สำหรับ octal มันหายากในทุกวันนี้ แต่ยังคงใช้สำหรับสิทธิ์ระบบไฟล์ Unix

ดูเพิ่มเติมที่: การใช้งานจริงของการทำงานระดับบิต

แม้ว่าคุณจะสามารถที่จะหลีกเลี่ยงที่เคยทำใด ๆ "ใกล้กับเส้นลวด" การเขียนโปรแกรมก็ยังคงเป็นสิ่งสำคัญที่จะตระหนักถึงความจริงที่ว่าคอมพิวเตอร์ทำงานในไบนารีด้วยเหตุผลง่ายๆ: Abstractions การรั่วไหล

intเป็นนามธรรมในภาษาส่วนใหญ่รั่วธรรมชาติที่มีความกว้างคงที่ นัมเบอร์ล้นและพวกเขาทำเช่นนั้นได้ "รอบ" เลขฐานสองเช่น 2 วันที่ 31 นักคิดเลขฐานสิบเท่านั้นจะไม่สามารถอธิบายข้อบกพร่องปี 2038ได้

กระบวนการfloat/ doubleนามธรรมการรั่วไหลของ radix ของ 2 ถ้าคุณเขียน0.1คุณจริงๆได้รับ 0,1000000000000000055511151231257827021181583404541015625 และคุณจะได้รับข้อบกพร่องถ้าคุณคาดหวัง 0.1 ที่แน่นอน


2

การจดจำตัวเลขเฉพาะที่มีรูปแบบง่าย ๆ ในฐานอื่น ๆ มักเป็นเบาะแสขนาดใหญ่เมื่อแก้ไขข้อบกพร่อง หากคำตอบของคุณไม่ถูกต้องด้วย 347 นั่นอาจไม่ได้หมายความว่าอะไร แต่ถ้าหากคุณตอบถูก 256 หรือ 128 บางทีนั่นอาจหมายถึงบางสิ่ง หากคุณใส่ -1 ลงในประเภทข้อมูล 16 บิตที่ไม่ได้ลงชื่อคุณจะได้รับ 65535 ซึ่งเป็น 1 น้อยกว่า 65536 ถ้าคุณรู้ 2 ^ 16 คุณจะพบปัญหาทันที

ลองดูที่คำถามเหล่านี้และดูว่าการจำฐานแปดเมื่อคุณถามโดยไม่ได้ตั้งใจจะทำให้โปรแกรมเมอร์เหล่านี้เป็นคนที่ดีขึ้นหรือไม่


1

มีเทคนิคการบีบอัดข้อมูลและคณิตศาสตร์ที่มีประสิทธิภาพสูงซึ่งคุณสามารถใช้เมื่อคุณเข้าใจระบบเหล่านี้และวิธีการทำงานของมัน คุณอาจจะไม่ใช้มันมากในงานแรก ๆ ของคุณ แต่การมีพวกมันไว้ในกระเป๋าหลังเมื่อคุณเป็นรุ่นพี่และคุณถูกขอให้สร้างระบบมรดกที่ทำงานหนักเกินไปที่ทำงานบนเซิร์ฟเวอร์ไดโนเสาร์ที่ทำงานหนักเกินกำลัง
มันมีความสำคัญมากขึ้นเมื่อคุณติดต่อกับคอนโทรลเลอร์และอุปกรณ์อิเล็กทรอนิกส์ที่ไม่มี API โดยเฉพาะถ้าคุณกำลังเขียน API นั้น


1

ในบทนำของหลักสูตรการเขียนโปรแกรมที่เป็นส่วนหนึ่งของการศึกษาในสาขาวิทยาการคอมพิวเตอร์มันทำให้รู้สึกถึงความรู้ที่ดี คุณทบทวนหัวข้อเมื่อการเขียนโปรแกรมในภาษาแอสเซมบลีเมื่อออกแบบฮาร์ดแวร์เรียนหลักสูตรภาษาทางการ ฯลฯ วิศวกรไฟฟ้าทุกคนในมหาวิทยาลัยของฉันต้องการหลักสูตรในการแนะนำการเขียนโปรแกรมและพวกเขาจะใช้ข้อมูลนั้นต่อไป นอกนั้นไม่สำคัญมาก


1

หมายเลขฐานแปดมีประโยชน์เป็นบางครั้งเมื่อจัดการกับชุดอักขระ หลังเป็นแบบไบต์และหนึ่งฐานแปด = 8 บิต = หนึ่งไบต์ ใน UTF-8 ตัวอย่างเช่นอักขระที่ไม่ใช่ ASCII สามารถมีอย่างน้อยสองไบต์ ตัวเลขฐานแปดมีความสะดวกในการแสดงมากกว่าเลขฐานสิบหก

บิตมีประโยชน์เพราะ ... เฮ้! คุณรู้หรือไม่ว่าคอมพิวเตอร์ของคุณกำลังติดต่อกับ 0s และ 1s อยู่ตลอดเวลาใช่ไหม? ฉันหมายถึงอย่างจริงจัง ... มันไม่เพียง แต่เกี่ยวกับความสามารถในการล้อเล่นว่านักวิทยาศาสตร์คอมพิวเตอร์เป็นคนเดียวที่รู้ว่า 1 + 1 = 10 นอกจากนี้ยังมีประโยชน์สำหรับตัวดำเนินการที่เกี่ยวข้องกับบิตหรือเป็น varbits หลังอนุญาตให้ลดความต้องการหน่วยเก็บในฐานข้อมูลเมื่อจัดการกับชุดของธง

สำหรับเลขฐานสิบหกฉันคิดว่าคุณไม่เคยเปิดตัวแก้ไข hex เพื่อเพิ่มสถิติและอุปกรณ์ตัวละคร RPG ของคุณ หากคุณทำเช่นนั้นแทนที่จะดาวน์โหลดตัวแก้ไขตัวอักษรคุณจะรู้ได้ดีว่าเหตุใดจึงสะดวกที่จะเข้าใจตัวเลขฐานสิบหก ;-)


ฉันคิดว่าคุณหมายถึง "octet" ไม่ใช่ "octal" เลขฐานแปดหนึ่งหลักคือสามบิต การใช้ค่าคงที่เลขฐานแปดสำหรับตัวอักษรที่ไม่ใช่ ASCII เป็นโฮลด์จากวันแรกของ C ซึ่งพัฒนาบน PDP-11 ซึ่งใช้การแทนค่าฐานแปดในเอกสารส่วนใหญ่ (ดูการ์ดอ้างอิง PDP-11 นี้ )
TMN

ฉันอาจจะ ภาษาอังกฤษไม่ใช่ภาษาแม่ของฉัน :-)
Denis de Bernardy

1

ฉันสำเร็จการศึกษาจากมหาวิทยาลัยเมื่อ 3 ปีที่แล้วและฉันคิดว่ามันสำคัญมากที่จะสามารถอ่านและเขียนเลขฐานสิบหกได้ ฉันยุ่งกับไฟล์ XML ขนาดใหญ่จำนวนมากเพื่อการทำงาน (ขนาดใหญ่หมายถึง 100MB +) บางครั้งคุณจะได้รับไฟล์ XML ที่บ่นว่าอักขระ XML ไม่ถูกต้องซึ่งไม่สามารถแสดงได้ในโปรแกรมแก้ไขข้อความใด ๆ ดังนั้นฉันจึงต้องใช้โปรแกรมแก้ไข Hex และเขียนรหัสเพื่อระบุอักขระที่ไม่ถูกต้อง งานนั้นจะยากมากโดยไม่ทราบเลขฐานสิบหก


1

หลายปีก่อนฉันเรียนรู้คุณค่าของเลขฐานสิบหกในขณะที่ทำงานกับระบบ 8 บิต

ความชัดเจนของความเข้าใจว่าบางสิ่งบางอย่างอยู่ที่ B000 หรือ E7FF นั้นน่าทึ่งมาก

เมื่อวานฉันต้องรู้แน่ชัดว่าตัวละครตัวใดที่อยู่ท้ายข้อความ การรู้ถึงความแตกต่างระหว่าง 0x0A และ 0x0A 0x0D นั้นสำคัญมาก


1

ใครบ้างมีตัวอย่างที่ดีของที่โปรแกรมเมอร์เฉลี่ยจะใช้เลขฐานแปดจริงหรือไม่?

Octal วันนี้ค่อนข้างหายาก แต่ฉันใช้ hex บ่อยมากและมักจะคิดเกี่ยวกับปัญหาในไบนารี

ฉันเขียนโปรแกรมเป็นหลักใน C และ C ++ โดยมี Objective C และทำงานกับ raster และกราฟิกแบบเวกเตอร์บน Linux และ Mac OS X เป็นอย่างมากในเวทีเหล่านั้นมันสำคัญยิ่งที่จะเขียนโค้ดที่ทำงานได้อย่างมีประสิทธิภาพ คุณต้องเข้าใจวิธีการที่เครื่องจักรแสดงถึงสิ่งที่คุณกำลังทำงานด้วย วิธีที่สะดวกที่สุดในการดูที่เป็นเลขฐานสิบหก ตัวอย่างเช่นพิกเซลสี 24 บิตมาตรฐานแสดงด้วยสามไบต์และรู้ได้ทันทีว่า 0x000000 เป็นสีดำ 0x00FF00 เป็นสีแดงและ 0x008000 เป็นสีชมพูมีประโยชน์จริง ๆ !

ฉันทำงานหนักมากกับมาตรฐานสากลสำหรับรูปแบบไฟล์ สิ่งหนึ่งที่ฉันได้ทำงานด้วยเมื่อเร็ว ๆ นี้คือ MXF ซึ่งใช้สำหรับเก็บวิดีโอเพื่อออกอากาศดีวีดีและอื่น ๆ มันเป็นรูปแบบไบนารีและอีกครั้งมันจัดการได้ง่ายที่สุดโดยใช้เลขฐานสิบหกหรือไบนารี เมื่อคุณทำการดีบั๊กเพราะเหตุใดวิดีโอที่ใช้ MXF บางอย่างจึงไม่สามารถเล่นได้ในระบบของคุณมันเป็นประโยชน์อย่างยิ่งที่จะสามารถดูได้ในบางฟิลด์ 32 บิตและรับรู้บิตของหน้าจอว่างเปล่าโดยไม่ได้ตั้งใจ - และคุณสามารถทำได้ ในฐานสิบหก แต่มันเป็นไปไม่ได้ในฐาน 10

หากคุณกำลังจะใช้อาชีพของคุณเขียน Perl ในการนวดสตริงข้อความแล้วไม่คุณอาจไม่จำเป็นต้องคุ้นเคยกับฐานสิบหกฐานแปดหรือไบนารี แต่ช่วงเวลาที่คุณเริ่มจัดการกับสิ่งต่าง ๆ ที่ฉันทำ hex และไบนารีอย่างน้อยมีความสำคัญ


0

คุณควรรู้เลขฐานสิบหกหากคุณต้องการเป็นโปรแกรมเมอร์ มันจะน่าอึดอัดใจเกินกว่าที่คุณจะต้องยอมรับในการทำงานในวันที่หายากที่คุณต้องรู้ว่าคุณไม่เข้าใจ

ไม่ได้หมายความว่าคุณจะต้องสามารถเพิ่มตัวเลขฐานสิบหกในหัวของคุณ มันเริ่มทำให้คุณสับสนกับกฎสำหรับการเพิ่มปกติหากคุณทำอยู่ดี :)


0

สิ่งที่ไบนารีฐานสิบหกและเลขฐานแปดมีเหมือนกันไม่ใช่ว่าพวกเขาไม่ใช่ฐาน 10 แต่พวกเขาเป็นพลังทั้งหมดของทั้งสอง เนื่องจากคอมพิวเตอร์เป็นระบบฐานสองโดยเนื้อแท้สิ่งนี้ทำให้แต่ละแอปพลิเคชั่นบางตัวมีวิธีที่เหมาะสมที่สุดหรือมีประสิทธิภาพในการแสดงและจัดการกับข้อมูล

สิ่งนี้เคยเป็นสิ่งสำคัญมากเมื่อทุกโปรแกรมอยู่ในระดับต่ำ ในการเขียนโปรแกรมระดับสูงในปัจจุบันระบบของ power-of-2 Number นั้นมีความสำคัญน้อยกว่ามาก มีการแนะนำอย่างละเอียดให้พวกเขาในทุกหลักสูตรการเขียนโปรแกรมอาจเป็นที่ระลึกของวันสมัยก่อน

แต่ระบบตัวเลขเหล่านี้ยังคงมีการใช้งานอยู่แม้ว่าคุณจะทำงานในภาษาระดับสูง ตัวอย่างเช่นสียังคงเก็บไว้ใน 24 บิต 8 บิตต่อสีหลัก และเนื่องจากเลขฐานสิบหกเป็นวิธีที่ดีที่สุดในการเป็นตัวแทนของไบต์ในลักษณะที่มนุษย์สามารถอ่านได้มันจึงเป็นส่วนหนึ่งของ CSS ซึ่งควรจะใช้งานได้โดยผู้ที่ไม่เคยแนะนำโปรแกรมมาก่อน

คุณไม่สามารถเข้าใจคอมพิวเตอร์โดยไม่เข้าใจเลขฐานสอง การแนะนำให้รู้จักกับไบนารีเป็นส่วนที่จำเป็นในการแนะนำการเขียนโปรแกรมทุกครั้งอย่างละเอียด คุณไม่จำเป็นต้องทำการแปลงจำนวนมากระหว่างระบบตัวเลขในการทำงานประจำวัน แต่การทำแบบฝึกหัดเป็นวิธีเดียวที่จะทำความคุ้นเคยกับระบบตัวเลขเหล่านี้ * การรู้มากกว่าหนึ่งระบบที่ไม่ใช่ฐาน 10 เป็นวิธีเดียวที่จะเข้าใจได้อย่างถูกต้องว่าข้อมูลสามารถแสดงได้หลายวิธีซึ่งทั้งหมดนั้นใช้ได้

  • ดังที่จอห์นฟอนนอยมันน์กล่าวว่า: "[.. ] เราไม่เข้าใจสิ่งต่าง ๆ เราคุ้นเคยกับมัน"

0

ฉันคิดว่าการแปลงจากฐานหนึ่งไปอีกฐานหนึ่งนั้นไม่สำคัญสำหรับการเขียนโปรแกรม ในการเขียนโปรแกรมระดับสูงคุณไม่ต้องการการแปลง (และคุณอาจเคยทำเช่นนั้นฟังก์ชั่น lib และเครื่องคิดเลขพร้อมใช้งาน) เมื่อคุณดำดิ่งสู่การเขียนโปรแกรมระดับล่างคุณจะไม่ได้อยู่ในหลักสูตรเบื้องต้นอีกต่อไป

ฉันคิดว่าประเด็นสองประเด็นที่เกี่ยวข้องกับการเรียนหลักสูตรพื้นฐาน

  1. เกี่ยวกับการเข้ารหัส มันไม่ได้เกี่ยวกับการแปลงทางคณิตศาสตร์ แต่เกี่ยวกับการใช้ตัวเลข (ตัวเลขชนิดใด ๆ ) เพื่อเก็บข้อมูล (ข้อมูลชนิดใด ๆ ) คุณสามารถอธิบายสิ่งนี้ด้วยรหัสมอร์สหรือระบายสีตามตัวเลขได้เช่นกันหากคุณต้องการ แต่เนื่องจากคอมพิวเตอร์ค่อนข้างใช้เลขฐานสองและเลขฐานสองจะแสดงเป็นเลขฐานสิบหกสิ่งต่าง ๆ จึงมักแสดงด้วยตัวอย่างฐานสิบหก (และในขณะที่พวกเขาอยู่ที่นี่พวกเขาอาจอธิบายเล็กน้อยเกี่ยวกับการจบบรรทัดซึ่งได้รับการกล่าวถึงในหัวข้อนี้ฉันขอแนะนำให้รู้จักรูปทรงและรูปแบบที่หลากหลายซึ่งอาจใช้เวลาเพียงไม่กี่ 0x0D, 0x0A , CRLF, '\ n' และ '\ r')

  2. ปัญหาล้น อีกครั้งไม่จำเป็นต้องแสดงตัวอย่างนี้ด้วย hex คุณสามารถใช้ตัวอย่าง y2k (ซึ่งไม่เกี่ยวข้องกับ hex แต่อย่างใด) ที่นี่ฉันก็แค่แนะนำให้รู้จักตัวชี้วัดที่เป็นไปได้ที่หลากหลายที่สุด (255, 32767, 65535, 2M14) เพราะเหตุใดตัวชี้วัดเหล่านี้จึงเชื่อมโยงโดยตรงกับธรรมชาติ bytewise ของการจัดเก็บข้อมูลภายใน แต่การแปลงไม่ได้เป็นส่วนสำคัญ

ฉันไม่เห็นด้วยที่คุณต้องรู้สำหรับ bitflags (เพราะในหลักสูตรเบื้องต้นของการเขียนโปรแกรมค่าคงที่ที่ตั้งชื่อนั้นมีประโยชน์มากกว่าการเรียนการสอนและมีประโยชน์)


0

หากคุณเข้าสู่การเขียนโปรแกรมฝังตัวในระดับต่ำคุณจะใช้เลขฐานสิบหก มันใช้สำหรับสิ่งต่าง ๆ เช่นการระบุรูปแบบบิตในการลงทะเบียนฮาร์ดแวร์และค่าไบต์ในการทิ้งหน่วยความจำ คุณจะได้เรียนรู้การใช้ตัวดำเนินการ bit-wise ทุกอย่างในภาษาการเขียนโปรแกรมที่คุณใช้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.