ระบบเลขฐานสิบหกคืออะไร?


13

ระบบเลขฐานสิบหกคืออะไรและทำไมจึงใช้ในการคำนวณมาก ฉันรู้ว่าคอมพิวเตอร์ใช้ 0 และ 1 เพื่อเก็บข้อมูลดังนั้นทำไมเราจึงใช้เลขฐานสิบหก


13
หากไม่อยู่นอกหัวข้อคำถามพื้นฐานเช่นนี้จะไม่ซ้ำกันหลังจาก 5 ปีหลังจากการเริ่มต้นของผู้ใช้ขั้นสูงได้อย่างไร
Peter Mortensen

3
@PeterMortensen แม้แต่คนที่น่ากลัวมันยังไม่ถูกถามแม้แต่ในเว็บไซต์น้องสาวอย่างน้อยก็ไม่ใช่ว่าฉันจะหาได้
Nzall

9
อาจไม่จำเป็นต้องถามเพราะ Wikipedia มีคำตอบที่ดีงาม: en.wikipedia.org/wiki/Hexadecimal
Piers Myers

4
ทำไม upvotes มากมาย?
วิ

คำตอบ:


31

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

มนุษย์ส่วนใหญ่ใช้ระบบทศนิยม (ฐาน 10) ซึ่งเรามีตัวเลข 10 ตัว:

0, 1, 2, 3, 4, 5, 6, 7, 8 และ 9

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

ในวันก่อนหน้านี้มีการใช้ฐานแปด (หรือฐาน 8) เป็นเรื่องที่ดีเพราะ "10" ในฐาน 8 คือ "0b1000" ในไบนารี (10 ในทศนิยมคือ 1010 ในไบนารี) เลขฐานแปดมักจะนำหน้า "0o" เมื่อเขียนตัวเลข (แต่จะขึ้นต้นเพียง '0' ในภาษาการเขียนโปรแกรมส่วนใหญ่) มันเรียกว่าฐาน 8 เพราะเรามีตัวเลขแปดตัว

Octal ยังคงถูกใช้อยู่ในปัจจุบันส่วนใหญ่เมื่อตั้งค่าการอนุญาตใน Unix และ Linux

เมื่อเวลาผ่านไปเราต้องการวิธีที่ง่ายกว่าในการแสดงตัวเลขที่มากขึ้นเนื่องจากกำลังในการคำนวณและพื้นที่เพิ่มขึ้นอย่างรวดเร็ว มันกลายเป็นมาตรฐานในการใช้เลขฐานสิบหกหรือฐาน 16 เพราะ 16 เช่น 8 คือพลังของ 2 ซึ่งทำให้ง่ายต่อการแปลงแบบตัวเลขต่อหลัก (ดูความคิดเห็นนี้เพราะมี 16 ตัวเลขตัวอักษรถูกใช้สำหรับ ตัวเลขอื่น ๆ นอกจากนี้เลขฐานสิบหกมักจะนำหน้าด้วย 0x

เลขฐานสิบก็มีประโยชน์เช่นกันเนื่องจากเลขฐานสิบหกคือ 4 บิต (หมายเลขฐานแปด 1 ตัวสามารถแทนค่า 2) ได้ดังนั้นจึงมีตัวเลขสองตัวเป็นไบต์ ในโปรแกรมแก้ไขฐานสิบหกส่วนใหญ่นี่คือวิธีการแสดงไบต์

นับ

ในฐาน 10 เรามี 10 ตัวเลข หลังจาก 9 เราจะทำอย่างไร เรามีตัวเลขไม่ครบ เราสร้างสถานที่ "สิบ" ทางด้านซ้ายของหมายเลขเดิมมีที่ 1 และด้านขวาสุดจะกลายเป็น 0 สิ่งเดียวกันเกิดขึ้นในเลขฐานสิบหกเช่นกัน:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, ฯลฯ

จนกว่าเราจะถึง 0x1F แล้วกระบวนการจะทำซ้ำจนถึง 0xFF (255 ในรูปทศนิยม) จากนั้นเราจะได้ 0x100 ข้อมูลเพิ่มเติมเกี่ยวกับการนับสามารถพบได้ที่นี่

นี่คือแผนภูมิที่แสดงการแปลงระหว่างทศนิยมฐานสิบหกฐานแปดและไบนารี: แผนภูมิการแปลงเลขฐานสิบหก


21
ประโยชน์หลักคือเพราะ 16 คือพลังของ 2 คุณสามารถทำการแปลงเป็นตัวเลขแบบดิจิตัล
TRiG

2
โปรดทราบว่าหลายภาษาใช้ส่วน0นำหน้าและไม่ใช่0oสำหรับหมายเลขฐานแปด
ysap

2
บันทึกย่อของคุณเกี่ยวกับ 16 การเป็นทวีคูณของ 2 ถูกคัดลอกมาจากความคิดเห็นของ TRiG อย่างไม่ถูกต้อง การเป็นทวีคูณไม่ใช่ความสัมพันธ์ที่เกี่ยวข้อง
Ryan Reich

2
@ justcool393 อาจเป็นมูลค่าการกล่าวขวัญว่าชื่อของสิ่งที่คุณเรียกว่า "ฐาน 10" เป็น "ทศนิยม" สิ่งนี้อาจช่วยให้ชัดเจนความสัมพันธ์ระหว่างฐาน 8 (ฐานแปด) ฐาน 10 (ฐานสิบ) และฐาน 16 (ฐานสิบหก)
HalosGhost

3
Arrrg ทุกฐานเป็นฐาน 10! stale.soup.io/post/114652207/every-base-is-base-10
woliveirajr

4

ระบบเลขฐานสิบหกคืออะไร

ระบบเลขฐานสิบหกเป็นระบบเลขฐาน 16 ที่ใช้ 16 หลัก ( 0123456789ABCDEF) ซึ่งต่างจากไบนารีที่ใช้ 2 ( 01) หรือทศนิยมซึ่งใช้ 10 (0-9) เนื่องจากมีตัวเลขเพียง 10 หลัก (ในระบบของเรา) ตัวอักษรจาก A ถึง F จึงถูกใช้เพื่ออธิบาย "หลัก # 10" "หลัก # 11" เป็นต้น

ทำไมมันใช้มากในการคำนวณ

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

| hex bin  | hex bin  |
| 0   0000 | 8   1000 |
| 1   0001 | 9   1001 |
| 2   0010 | A   1010 |
| 3   0011 | B   1011 |
| 4   0100 | C   1100 |
| 5   0101 | D   1101 |
| 6   0110 | E   1110 |
| 7   0111 | F   1111 |

ทำไมเราจึงใช้เลขฐานสิบหก

มันทำให้ง่ายกว่าเลขฐานสองเพื่อแสดงจำนวนมาก ตัวเลขฐานสิบหกสองหลักเท่านั้นที่สามารถเป็นตัวแทนของค่าที่แตกต่างกันได้ 256 ค่าเช่นใน:

dec  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...
hex 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 ...

เลขฐานสิบหกสี่หลักสามารถแทนค่า 65536 และอื่น ๆ Hex ทำให้ง่ายต่อการตรวจสอบข้อมูลด้วยสิ่งที่เรียกว่าhexdumpเนื่องจากตัวอักษรตัวเลขและเครื่องหมายวรรคตอนจะถูกจัดเก็บในรูปแบบที่แมปอักขระแต่ละตัวเป็นตัวเลขระหว่าง 0 ถึง 256 (เรียกว่าASCIIหรือบางครั้งใช้การเข้ารหัสอื่น ๆ ) นอกจากนี้รูปแบบไฟล์อื่น ๆ อีกมากมาย (เช่น PNG) ได้รับการปรับแต่งเพื่อให้ข้อมูลแต่ละส่วนที่ไฟล์ประกอบด้วย 256 บิต

โดยสรุป 16 คือพลัง 2 และ 256 เป็นพลัง 16 ทำให้เป็นวิธีที่ดีในการแสดงทั้งเลขฐานสองและข้อความหรือข้อมูลอื่น ๆ


2

ระบบเลขฐานสิบหกคืออะไร?

หากคุณมีตัวเลข abcd ดังนั้นสิ่งนี้จะเทียบเท่ากับ ((a * + b) + c) + d ดังนั้นนี่คือ:

  • abcd (ไบนารี) = ((* 2 + b) * 2 + c) * 2 + d
  • abcd (octal) = ((a * 8 + b) * 8 + c) * 8 + d
  • abcd (ฐานสิบ) = ((a * 10 + b) * 10 + c) * 10 + d
  • abcd (เลขฐานสิบหก) = ((a * 16 + b) * 16 + c) * 16 + d

ในระบบเลขฐานสิบหกคุณต้องมี 16 หลัก แต่เรามีเพียงสิบหลักเท่านั้น (0..9) ดังนั้นสำหรับตัวเลข 6 ตัวที่ขาดหายไปตัวอักษร A..F จะถูกใช้กับ A = 10, ... , F = 15

แน่นอนคุณยังสามารถนึกถึงระบบตัวเลขอื่น ๆ อีกมากมายเช่นฐาน 5 หรือ 7

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

ทำไมระบบเลขฐานสิบหกจึงใช้ในการคำนวณมาก

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

เหตุใดโปรแกรมเมอร์ (เช่นฉัน) จึงใช้ระบบตัวเลขต่างกัน มีเหตุผลสองข้อในการเลือกระบบตัวเลขโดยใช้กำลัง 2 สิ่งแรกคือความสั้นและประการที่สองคือมุมมองที่ดีของการตั้งค่าบิต

ความห้วน

ถ้าฉันมีฟังก์ชั่นที่กำลังเขียนเนื้อหาของบัฟเฟอร์ไปยังคอนโซลฉันก็สามารถเขียนโค้ดที่พิมพ์เป็นทศนิยมซึ่งเป็น 1 ถึง 3 หลัก (ทศนิยม: 0..255) ถ้าฉันกำลังเขียนตัวเลขในรูปแบบไบนารีจากนั้นฉันก็จะจบลงด้วยการออก 1 ถึง 8 หลัก (ไบนารี: 0..11111111) ฉันยังสามารถใช้ระบบฐานแปดและท้ายด้วย 1 ถึง 3 หลัก (ฐานแปด: 0..377) หรือเลขฐานสิบหกที่มี 1 ถึง 2 หลัก (เลขฐานสิบหก: 0..ff)

นี่เป็นเพียงหนึ่งไบต์เท่านั้น สมมติว่าคุณต้องการเขียนหมายเลข 32 บิต:

  • ไบนารี: 0..1111111111111111111111111111111111
  • เลขฐานแปด: 0..37777777777
  • ทศนิยม: 4294967295
  • เลขฐานสิบหก: 0..ffffffff

อย่างที่คุณเห็นว่าเอาต์พุตเลขฐานสิบหกนั้นสั้นที่สุด

เห็นบิต

รูปแบบทั่วไปในการจัดเก็บข้อมูลที่บรรจุคือการใช้แต่ละบิตในไบต์ทีละรายการ ลองดูตัวอย่างไฟล์แอตทริบิวต์ (ดูMDSN ) คุณต้องการแอตทริบิวต์ "hidden", "archive", "readonly", "temporary" และอื่น ๆ คุณสามารถเก็บแต่ละแอตทริบิวต์ในหนึ่งไบต์หรือคุณสามารถแพ็คข้อมูลลงในหนึ่งไบต์ (หรือหลายไบต์) โดยที่แต่ละบิตแสดงถึงหนึ่งแอตทริบิวต์ หากคุณดู dwFlagsAndAttributes ในบทความ MSDN คุณจะเห็นว่า Windows กำลังใช้รูปแบบนี้

ลองอยู่ที่หน้า MSDN FILE_ATTRIBUTE_ENCRYPTEDเป็นตัวอย่างธงนี้คือทศนิยม 16384 และเลขฐานสิบหก 0x4000 "0x" นำหน้าเป็นเพียงการประชุมของโปรแกรมเมอร์ C เพื่อทำเครื่องหมายตัวเลขฐานสิบหกดังนั้นเราจะดูที่ 4000 เมื่อคุณต้องการรู้ว่าบิตใดถูกตั้งค่าจากนั้นคุณจะต้องแปลง 16384 เป็นเลขฐานสองก่อน - ไม่มีอะไรที่คุณจะทำได้ ปกติแล้วจะทำอย่างไรกับการคิดเลขในใจ แต่ลองเลขฐานสิบหก 4000 กันมันค่อนข้างง่าย 16 คือ 2 * 4 ดังนั้นเลขฐานสิบหกทุกตัวคือ 4 บิต ดังนั้นเราแค่แปลง 4 เป็นไบนารี 0100 และเลขศูนย์เป็นไบนารี 0000 แล้วเสร็จ

บ่อยครั้งที่มันไม่ได้เกี่ยวกับบิตส่วนบุคคล แต่โปรแกรมเมอร์มักจะปรับตำแหน่งให้อยู่ในระดับกำลังของ 2 เราชอบที่จะโหลดโปรแกรมไม่ใช่ที่อยู่แบบสุ่ม แต่เป็นที่อยู่ที่มีบิตที่สำคัญน้อยที่สุด 16 บิตที่ตั้งค่าเป็นศูนย์ ด้วยวิธีนี้หากคุณมีที่อยู่ 0x12345678 คุณจะเห็นได้ว่าที่อยู่นี้เป็นของโปรแกรมที่โหลดเป็น 0x1234 และไม่ใช่ที่อยู่ที่โหลดเป็น 0x03810000

ชอบไบนารีฐานแปดหรือฐานสิบหก?

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

แต่ทำไมไม่ใช้ base 32 ล่ะ?

ฐาน 32 คือพลังของ 2 มันยอดเยี่ยมมาก แต่คุณต้องมีตัวเลข 32 หลักเช่น 0..9, A..V นี่คือตัวเลขที่จำได้มากขึ้น (คุณสามารถระบุได้อย่างง่ายดายว่าหมายเลขใดที่จะตอบกลับ) ข้อแม้อื่นคือด้วยฐาน 32 คุณปล่อยคุณลักษณะที่ดีที่เลขฐานสิบหกสองหลักคือหนึ่งไบต์ซึ่งมีประโยชน์จริง ๆ ถ้าคุณดูเนื้อหาของหน่วยความจำ! ด้วยฐาน 32 คุณยังต้องการ 2 หลักเพื่อแทนค่าที่หนึ่งไบต์สามารถมีได้ สำหรับค่า 32 บิตคุณต้องการเพียง 7 หลักแทนที่จะเป็นเลขฐานสิบหก 8 หลัก แต่นั่นก็ไม่มากที่จะอยู่กับข้อเสียของระบบฐาน 32


1

ระบบการแทนตัวเลขที่ใช้กันในปัจจุบันคือ (= รวม):
ไบนารีฐานแปดฐานสิบและฐานสิบหก
ตัวเลือกใดที่มักจะขึ้นอยู่กับความสะดวกในการใช้งานสำหรับงานที่ต้องทำ

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

octalนั้นดีถ้ามีกลุ่มของเลขฐานสองสามหลักเช่นในกรณีที่การตั้งค่าการอนุญาตใน Unix / Linux

การข้ามทศนิยมสักครู่เลขฐานสิบหกก็ดีในลักษณะเดียวกับเลขฐานแปด แต่สำหรับเลขฐานสองสี่หลักและความจริงที่ว่า 8 บิตหนึ่งไบต์เหมาะอย่างยิ่งกับเลขฐานสิบหกสองตัว ( = คำตอบ )
สิ่งนี้ตามมาว่ากลุ่มคู่ -8-bit-group ในคอมพิวเตอร์นั้นเขียนได้ง่ายแสดงและเข้าใจ - นั่นคือ; สะดวกมากในการใช้งานประจำวันเมื่อเขียนซอฟต์แวร์จัดการข้อมูล (เช่นค่าสี rgb ใน HTML / CSS) สร้างโครงสร้างข้อมูลและสิ่งอื่นที่คล้ายคลึงกัน

ทศนิยม อาจเดาได้ว่าระบบทศนิยมพัฒนาจากความจริงที่ว่าเรามีสิบนิ้วและนิ้วเท้า ตัวเลขหนึ่งหลักหมายถึงจำนวนรายการนับหนึ่งสำหรับแต่ละนิ้วจนถึงจำนวนสูงสุดสิบ

สิ่งเหล่านี้แสดงถึงระบบตัวเลขที่มีฐานเป็น:
2, 8, 10 และ 16

โดยทั่วไปฐานจะบอกจำนวน "รายการ" หลักเดียวที่คุณสามารถนับได้เช่นไบนารีมีสองทศนิยมคือสิบ
เนื่องจากเลขฐานสิบหกมี 16 รายการหลักเดียวระบบต้องการ 16 "ตัวเลข" ดังนั้นใช้ 0-9 และ af (6 พิเศษเมื่อเทียบกับทศนิยม) โดยที่ "a" เท่ากับ 10 และ "f" เท่ากับ 15 ในระบบทศนิยม

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

ตัวเลขในรูปทศนิยมประกอบด้วย:

... d * 10³ + c * 10² + b * 10¹ + a * 10⁰

สำหรับเลขทศนิยม "dcba" - ด้วย d, c, b, a, เลือกจาก 0123456789

ตอนนี้เปลี่ยนเป็น:

... d * base³ + c * base² + b * base¹ + a * base⁰

และคุณมีรูปแบบทั่วไปที่แสดงว่า "ทำงาน" ฐาน 2 หรือสูงกว่าใด ๆ
เช่นตัวเลขห้าหลักฐาน 5 สามารถทำได้อย่างสะดวกสบายเหมือนกับที่อื่น ๆ ข้างต้นหรือทำไมไม่ใช้ระบบ 12 หลัก (หนึ่งโหล) สำหรับเวลา (12 ชั่วโมง = "10" ฐาน 12 พร้อมกับ "ทศนิยม" ตัวแรกที่บอกว่า 1 / 12th [5 นาที] ของชั่วโมงนั้น)

หมายเหตุ: ⁰¹²³ - superscript 0123 หากหน้าจอของคุณแสดงเป็นอย่างอื่น


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