ห้องสอนสด

ระบบเลขฐานและการแปลงเลขฐาน

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

01 / 05

ระบบเลขฐานทั้งสี่

ฐานเป็นตัวกำหนดสองสิ่ง: ระบบใช้ตัวเลขที่ต่างกันกี่ตัว และแต่ละหลักมีค่าเท่าใด เมื่อเข้าใจแนวคิด “ค่าประจำหลัก” แล้ว ทุกฐานจะทำงานเหมือนกันหมด

ฐานคืออะไร

ระบบเลขฐาน b ใช้ตัวเลขที่ต่างกัน b ตัวพอดี และแต่ละหลักมีค่าเป็นกำลังของ b เมื่ออ่านจากขวาไปซ้าย ค่าประจำหลักคือ b⁰, b¹, b², b³, … ดังนั้นฐานสอง (binary) ใช้ 0-1 ฐานแปด (octal) ใช้ 0-7 ฐานสิบ (decimal) ใช้ 0-9 และฐานสิบหก (hexadecimal) ใช้ 0-9 แล้วต่อด้วย A-F แทนค่าสิบถึงสิบห้า [1] ความต่างเดียวระหว่างแต่ละระบบคืออัตราการเพิ่มของค่าประจำหลัก: ฐานสองเพิ่มทีละสองเท่า ฐานแปดทีละ ×8 ฐานสิบหกทีละ ×16 [2]

ค่าประจำหลัก: แต่ละหลักคือกำลังของฐาน

หลัก (นับจากขวา)ค่าฐานสิบ (10ⁿ)ค่าฐานสอง (2ⁿ)
011
1102
21004
310008
41000016
510000032

ฐานสอง (base-2)

ฐานสองใช้เพียง 0 และ 1 เพราะฮาร์ดแวร์ดิจิทัลเก็บข้อมูลด้วยส่วนประกอบที่สลับระหว่างสองสถานะ (ปิด/เปิด, ต่ำ/สูง) หนึ่งไบต์มี 8 บิต จึงเก็บค่าได้ 2⁸ = 256 ค่า คือ 0 ถึง 255 ฐานสองแม่นยำแต่ยาว จึงมีฐานแปดและฐานสิบหกไว้เป็นรูปแบบย่อ [2]

ฐานแปด (base-8)

ฐานแปดใช้ตัวเลข 0-7 และเลขฐานแปดหนึ่งหลักแทนได้พอดีสามบิต ปัจจุบันยังพบบ่อยในสิทธิ์ไฟล์ของ Unix/Linux ที่ใช้เช่น 0o644 หรือ 0o755 อธิบายบิตอ่าน/เขียน/รัน ในรูปแบบกระชับ [3]

ฐานสิบ (base-10)

ฐานสิบคือระบบที่มนุษย์ใช้ในชีวิตประจำวัน มีตัวเลข 0-9 คอมพิวเตอร์แปลงเข้า-ออกฐานสิบที่ขั้นรับเข้าและแสดงผล แต่ภายในไม่ได้คำนวณด้วยฐานสิบ

ฐานสิบหก (base-16)

ฐานสิบหกใช้ 0-9 แล้วต่อด้วย A-F (A=10 … F=15) และเลขฐานสิบหกหนึ่งหลักแทนได้พอดีสี่บิต เพราะเลขฐานสิบหกสองหลักจับคู่กับหนึ่งไบต์พอดี จึงพบฐานสิบหกได้ทั่วไป: สีในเว็บ (#FF8800) ตำแหน่งหน่วยความจำ ที่อยู่ MAC และค่าแฮช [4]

DecBinaryOctHex100011120010228100010810101012A15111117F16100002010
ค่าแรก ๆ ในฐานสิบ ฐานสอง ฐานแปด และฐานสิบหก

ตารางอ้างอิง: 0 ถึง 16 ในทั้งสี่ฐาน

ฐานสิบฐานสองฐานแปดฐานสิบหก
0000000
1000111
2001022
3001133
4010044
5010155
6011066
7011177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F
16100002010

ควรจำ 0–15 ให้ได้ จะช่วยให้แปลงทุกครั้งเร็วขึ้น

วิธีเขียนระบุฐาน

เพื่อเลี่ยงความกำกวม เราระบุฐานด้วยคำนำหน้าหรือตัวห้อย: 0b หรือ ₂ สำหรับฐานสอง, 0o หรือ ₈ สำหรับฐานแปด, 0x (หรือ # สำหรับสี) หรือ ₁₆ สำหรับฐานสิบหก และเขียนตัวเลขล้วนสำหรับฐานสิบ ดังนั้น 0b1010, 0o12 และ 0x0A ล้วนหมายถึงฐานสิบ 10 [4]

แบบฝึกหัด — รู้จักฐาน

  • 1

    ในฐานสิบหก ตัวอักษรใดแทนค่าฐานสิบ 10 ถึง 15?

    ดูเฉลย

    คำตอบ: A=10, B=11, C=12, D=13, E=14, F=15

  • 2

    เลข 0o17 เขียนในฐานใด และมีการกระจายค่าประจำหลักอย่างไร?

    ดูเฉลย

    คำตอบ: ฐานแปด (base-8); 1×8 + 7×1

  • 3

    ในฐานสอง หลักที่ 7 (นับจากขวา เริ่มที่หลัก 0) มีค่าประจำหลักเท่าใด?

    ดูเฉลย

    คำตอบ: 2⁷ = 128

  • 4

    ข้อใดไม่ใช่เลขฐานแปดที่ถูกต้อง: 17, 28, 70?

    ดูเฉลย

    คำตอบ: 28 ไม่ถูกต้อง

    วิธีทำ

    เลขฐานแปดมีตัวเลข 0–7 เท่านั้น
    28 มีเลข 8 ซึ่งไม่มีในฐานแปด
  • 5

    ใช้ตารางอ้างอิง เขียนฐานสิบ 12 เป็นฐานสอง ฐานแปด และฐานสิบหก

    ดูเฉลย

    คำตอบ: 1100₂, 14₈, C₁₆

02 / 05

แปลงฐานใด ๆ เป็นฐานสิบ (ผลรวมถ่วงน้ำหนัก)

ฐานสิบเป็นปลายทางที่ง่ายที่สุดเพราะเราบวกในฐานสิบได้โดยตรง กฎเดียวกันนี้ใช้ได้กับฐานสอง ฐานแปด และฐานสิบหก: คูณแล้วบวก

ขั้นตอน

  1. 1เขียนค่าประจำหลักของแต่ละหลัก (กำลังของฐาน) โดยเพิ่มจากขวาไปซ้าย
  2. 2คูณตัวเลขแต่ละหลักด้วยค่าประจำหลักของมัน
  3. 3บวกผลคูณทั้งหมด ผลรวมคือค่าฐานสิบ

ฐานสอง 11010₂ → ฐานสิบ

1 1 0 1 0 (ตัวเลข)
16 8 4 2 1 (ค่าประจำหลัก)
1×16 + 1×8 + 0×4 + 1×2 + 0×1
= 16 + 8 + 2 = 26

ฐานแปด 345₈ → ฐานสิบ

3 4 5 (ตัวเลข)
64 8 1 (ค่าประจำหลัก)
3×64 + 4×8 + 5×1
= 192 + 32 + 5 = 229

ฐานสิบหก 1A7₁₆ → ฐานสิบ

1 A 7 (ตัวเลข, A = 10)
256 16 1 (ค่าประจำหลัก)
1×256 + 10×16 + 7×1
= 256 + 160 + 7 = 423

กฎผลรวมถ่วงน้ำหนักนี้ใช้ได้กับทุกฐาน เปลี่ยนเพียงเลขยกกำลัง (กำลังของ 2, 8 หรือ 16 แทน 10) [1][2]

แบบฝึกหัด — แปลงเป็นฐานสิบ

  • 1

    101101₂ = ? (ฐานสิบ)

    ดูเฉลย

    คำตอบ: 45

    วิธีทำ

    1×32 + 0×16 + 1×8 + 1×4 + 0×2 + 1×1
    = 32 + 8 + 4 + 1 = 45
  • 2

    72₈ = ? (ฐานสิบ)

    ดูเฉลย

    คำตอบ: 58

    วิธีทำ

    7×8 + 2×1 = 56 + 2 = 58
  • 3

    2C₁₆ = ? (ฐานสิบ)

    ดูเฉลย

    คำตอบ: 44

    วิธีทำ

    C = 12
    2×16 + 12×1 = 32 + 12 = 44
  • 4

    11111111₂ = ? (ฐานสิบ)

    ดูเฉลย

    คำตอบ: 255

    วิธีทำ

    128+64+32+16+8+4+2+1 = 255
  • 5

    FF₁₆ = ? (ฐานสิบ)

    ดูเฉลย

    คำตอบ: 255

    วิธีทำ

    15×16 + 15×1 = 240 + 15 = 255

03 / 05

แปลงฐานสิบเป็นฐานใด ๆ (หารแล้วเก็บเศษ)

ในทางกลับกัน ให้หารด้วยฐานปลายทางซ้ำ ๆ แล้วนำเศษมาอ่านย้อนกลับเป็นคำตอบ

ขั้นตอน

การแปลงจำนวนฐานสิบให้เป็นฐาน b:

  1. 1หารจำนวนด้วยฐานปลายทาง b
  2. 2จดผลหาร (quotient) และเศษ (remainder)
  3. 3ทำซ้ำกับผลหารจนกว่าจะเหลือ 0
  4. 4อ่านเศษจากล่างขึ้นบน นั่นคือคำตอบ [1]

156 → ฐานสอง (หารด้วย 2)

156 ÷ 2 = 78 เศษ 0
78 ÷ 2 = 39 เศษ 0
39 ÷ 2 = 19 เศษ 1
19 ÷ 2 = 9 เศษ 1
9 ÷ 2 = 4 เศษ 1
4 ÷ 2 = 2 เศษ 0
2 ÷ 2 = 1 เศษ 0
1 ÷ 2 = 0 เศษ 1
อ่านขึ้น → 10011100₂

156 → ฐานสิบหก (หารด้วย 16)

156 ÷ 16 = 9 เศษ 12 (C)
9 ÷ 16 = 0 เศษ 9
อ่านขึ้น → 9C₁₆

100 → ฐานแปด (หารด้วย 8)

100 ÷ 8 = 12 เศษ 4
12 ÷ 8 = 1 เศษ 4
1 ÷ 8 = 0 เศษ 1
อ่านขึ้น → 144₈

ตรวจคำตอบเสมอด้วยการแปลงกลับเป็นฐานสิบด้วยผลรวมถ่วงน้ำหนัก: 144₈ = 64 + 32 + 4 = 100 ✓

แบบฝึกหัด — แปลงจากฐานสิบ

  • 1

    45 → ฐานสอง

    ดูเฉลย

    คำตอบ: 101101₂

    วิธีทำ

    45÷2=22 เศษ1
    22÷2=11 เศษ0
    11÷2=5 เศษ1
    5÷2=2 เศษ1
    2÷2=1 เศษ0
    1÷2=0 เศษ1
    อ่านขึ้น → 101101₂
  • 2

    200 → ฐานสิบหก

    ดูเฉลย

    คำตอบ: C8₁₆

    วิธีทำ

    200÷16=12 เศษ8
    12÷16=0 เศษ12 (C)
    อ่านขึ้น → C8₁₆
  • 3

    83 → ฐานแปด

    ดูเฉลย

    คำตอบ: 123₈

    วิธีทำ

    83÷8=10 เศษ3
    10÷8=1 เศษ2
    1÷8=0 เศษ1
    อ่านขึ้น → 123₈
  • 4

    255 → ฐานสิบหก

    ดูเฉลย

    คำตอบ: FF₁₆

    วิธีทำ

    255÷16=15 เศษ15 (F)
    15÷16=0 เศษ15 (F)
    อ่านขึ้น → FF₁₆

แหล่งอ้างอิง

  1. [1]Base Conversions for Number System — GeeksforGeeks

04 / 05

ทางลัด: ฐานสอง ↔ ฐานแปดและฐานสิบหก

ระหว่างฐานสองกับฐานแปด/ฐานสิบหก ไม่ต้องผ่านฐานสิบเลย เพราะฐานเหล่านี้เป็นกำลังของสอง จึงเพียงแค่จับกลุ่มบิต

เพราะ 8 = 2³ และ 16 = 2⁴ เลขฐานสองจึงเรียงตรงกับฐานแปดและฐานสิบหกพอดี: เลขฐานแปดหนึ่งหลักคือสามบิต เลขฐานสิบหกหนึ่งหลักคือสี่บิต เราจึงแปลงได้ด้วยการจับกลุ่มบิต ไม่ต้องหารหรือบวก [1][2]

ฐานสอง → ฐานสิบหก

  1. 1เริ่มจากขวา แบ่งบิตเป็นกลุ่มละ 4 (เรียกว่านิบเบิล)
  2. 2ถ้ากลุ่มซ้ายสุดไม่ครบ ให้เติมศูนย์นำหน้า
  3. 3แทนแต่ละกลุ่ม 4 บิตด้วยเลขฐานสิบหก (ใช้ตารางอ้างอิง) [1]

11010110₂ → ฐานสิบหก

1101 0110
D 6
→ D6₁₆

ฐานสอง → ฐานแปด

  1. 1เริ่มจากขวา แบ่งบิตเป็นกลุ่มละ 3
  2. 2ถ้ากลุ่มซ้ายสุดไม่ครบ ให้เติมศูนย์นำหน้า
  3. 3แทนแต่ละกลุ่ม 3 บิตด้วยเลขฐานแปด [2]

11010110₂ → ฐานแปด

011 010 110
3 2 6
→ 326₈
Binary 11010110Hexadecimal — group 4 bits1101D01106= D6₁₆Octal — group 3 bits011301021106= 326₈
การจับกลุ่มบิตเป็นฐานสิบหก (4 บิต) และฐานแปด (3 บิต)

แปลงกลับ: 2F₁₆ และ 57₈ → ฐานสอง

2 = 0010, F = 1111 → 00101111 = 101111₂
5 = 101, 7 = 111 → 101111₂
(ทั้งคู่เท่ากับฐานสิบ 47 — ใช้ตรวจทานได้ดี)

ใช้ 4 บิตต่อหนึ่งหลักฐานสิบหก และ 3 บิตต่อหนึ่งหลักฐานแปด อย่าสลับขนาดกลุ่มเด็ดขาด [3]

แบบฝึกหัด — จับกลุ่มบิต

  • 1

    10111100₂ → ฐานสิบหก

    ดูเฉลย

    คำตอบ: BC₁₆

    วิธีทำ

    1011 1100
    B C
    → BC₁₆
  • 2

    110101₂ → ฐานแปด

    ดูเฉลย

    คำตอบ: 65₈

    วิธีทำ

    110 101
    6 5
    → 65₈
  • 3

    A9₁₆ → ฐานสอง

    ดูเฉลย

    คำตอบ: 10101001₂

    วิธีทำ

    A = 1010, 9 = 1001
    → 10101001₂
  • 4

    11010₂ → ฐานแปด

    ดูเฉลย

    คำตอบ: 32₈

    วิธีทำ

    แบ่งกลุ่มละ 3 จากขวา: 011 010
    3 2
    → 32₈

05 / 05

โจทย์แบบฝึกหัดรวม

รวมทั้งสี่เทคนิคไว้ด้วยกัน ลองทำลงกระดาษก่อน แล้วจึงเปิดเฉลยเพื่อตรวจวิธีทำของคุณ

โจทย์

  • 1

    แปลง 11001011₂ เป็นฐานสิบและฐานสิบหก

    ดูเฉลย

    คำตอบ: 203 (ฐานสิบ), CB₁₆

    วิธีทำ

    ฐานสิบ: 128+64+8+2+1 = 203
    ฐานสิบหก: 1100 1011 → C B → CB₁₆
  • 2

    แปลง 0xB7 เป็นฐานสิบและฐานสอง

    ดูเฉลย

    คำตอบ: 183 (ฐานสิบ), 10110111₂

    วิธีทำ

    ฐานสิบ: 11×16 + 7 = 176 + 7 = 183
    ฐานสอง: B = 1011, 7 = 0111 → 10110111₂
  • 3

    แปลงฐานสิบ 175 เป็นฐานสองและฐานแปด

    ดูเฉลย

    คำตอบ: 10101111₂, 257₈

    วิธีทำ

    ฐานสอง: 128+32+8+4+2+1 = 175 → 10101111₂
    ฐานแปด: 175÷8=21 เศษ7, 21÷8=2 เศษ5, 2÷8=0 เศษ2 → 257₈
  • 4

    ค่าใดมากกว่ากัน: 0x2A หรือ 0o52?

    ดูเฉลย

    คำตอบ: เท่ากัน (ทั้งคู่คือ 42)

    วิธีทำ

    0x2A = 2×16 + 10 = 42
    0o52 = 5×8 + 2 = 42
  • 5

    ไฟล์มีสิทธิ์ 0o644 จงเขียนเป็นฐานสอง (9 บิต)

    ดูเฉลย

    คำตอบ: 110100100₂

    วิธีทำ

    6 = 110, 4 = 100, 4 = 100
    → 110 100 100 (rw- r-- r--)
  • 6

    แปลง 11110000₂ เป็นฐานสิบหกและฐานแปด

    ดูเฉลย

    คำตอบ: F0₁₆, 360₈

    วิธีทำ

    ฐานสิบหก: 1111 0000 → F 0 → F0₁₆
    ฐานแปด: 011 110 000 → 3 6 0 → 360₈