รหัสมอส › เลขฐาน 2
เลขฐาน 2: แปลงเลขฐานสอง ฐาน 8 ฐาน 10 และฐาน 16 พร้อมวิธีทำ
เลขฐาน 2 (เลขฐานสอง หรือ binary) ใช้ตัวเลขแค่ 2 ตัว คือ 0 กับ 1 แต่ละหลักมีค่าเป็นสองเท่าของหลักทางขวา เช่น 1011 = 8 + 0 + 2 + 1 = 11 ใส่ตัวเลขในช่องด้านล่าง แล้วเลือกว่าเป็นเลขฐานอะไร เครื่องจะแปลงเป็นฐาน 2, 8, 10 และ 16 ให้พร้อมกัน และแสดงวิธีหาร 2 เอาเศษทีละบรรทัด
วิธีแปลงเลขฐาน 10 เป็นเลขฐาน 2 แบบหาร 2 เอาเศษ
วิธีที่ครูสอนในห้องเรียนคือเอาเลขฐาน 10 หารด้วย 2 ไปเรื่อยๆ จดเศษไว้ทุกครั้ง พอผลหารเป็น 0 ก็หยุด แล้วอ่านเศษจากบรรทัดล่างขึ้นไปบรรทัดบน ตารางนี้ทำตามตัวเลขที่ใส่ไว้ด้านบนให้อัตโนมัติ เปลี่ยนเป็นหาร 8 หรือหาร 16 ก็ได้
ใส่ตัวเลขด้านบนแล้ววิธีทำจะขึ้นตรงนี้
ตัวอย่างเขียนมือ แปลง 45 เป็นเลขฐาน 2
คำตอบคือ 45 ในฐาน 10 เท่ากับ 101101 ในฐาน 2 ข้อผิดที่เจอบ่อยที่สุดคืออ่านเศษจากบนลงล่าง ซึ่งจะได้ 101101 กลับด้าน ตัวอย่างนี้บังเอิญอ่านได้เหมือนกันทั้งสองทาง ลองกับเลข 6 จะเห็นชัดกว่า เศษคือ 0, 1, 1 อ่านจากล่างขึ้นบนได้ 110 ไม่ใช่ 011
วิธีแปลงเลขฐาน 2 เป็นเลขฐาน 10
ทางกลับใช้การกระจายหลัก หลักขวาสุดมีค่า 1 หลักถัดไปมีค่า 2, 4, 8, 16 เพิ่มเป็นสองเท่าทุกหลัก เอาค่าของหลักที่เป็น 1 มาบวกกัน หลักที่เป็น 0 ไม่ต้องนับ
| ค่าประจำหลัก | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|
| เลขฐาน 2 | 1 | 0 | 1 | 1 | 0 | 1 |
101101 จึงเท่ากับ 32 + 8 + 4 + 1 = 45 ค่าประจำหลักก็คือ 2 ยกกำลัง 0, 1, 2, 3 ไปเรื่อยๆ นับจากขวา
เลขฐาน 8 และเลขฐาน 16 เกี่ยวกับเลขฐาน 2 อย่างไร
8 คือ 2 ยกกำลัง 3 และ 16 คือ 2 ยกกำลัง 4 เลขฐาน 2 จึงแปลงเป็นสองฐานนี้ได้โดยไม่ต้องหารเลย
- เป็นฐาน 8: แบ่งเลขฐาน 2 จากขวาทีละ 3 หลัก แล้วอ่านแต่ละกลุ่มเป็นเลข 0–7 เช่น
101 101= 5 กับ 5 ได้ 55 - เป็นฐาน 16: แบ่งจากขวาทีละ 4 หลัก กลุ่มซ้ายสุดไม่ครบให้เติม 0 ข้างหน้า แล้วอ่านเป็น 0–9 กับ A–F เช่น
0010 1101= 2 กับ 13 (D) ได้ 2D
ในเลขฐาน 16 ตัวอักษร A ถึง F แทนค่า 10 ถึง 15 เลขฐาน 16 จึงย่อเลขฐาน 2 ยาวๆ ได้สั้นมาก หนึ่งไบต์ (8 บิต) เขียนด้วยเลขฐาน 16 แค่ 2 หลักพอดี โปรแกรมเมอร์จึงนิยมใช้เขียนรหัสสีในเว็บและค่าไบต์ในหน่วยความจำ
ตารางเลขฐาน 2 ของ 0–31
ตารางนี้เขียนเลขฐาน 2 ครบ 5 หลักเพื่อให้เทียบกันง่าย ศูนย์ที่เติมข้างหน้าไม่ทำให้ค่าเปลี่ยน 00101 กับ 101 คือ 5 เท่ากัน
| ฐาน 10 | ฐาน 2 | ฐาน 8 | ฐาน 16 |
|---|---|---|---|
| 0 | 00000 | 0 | 0 |
| 1 | 00001 | 1 | 1 |
| 2 | 00010 | 2 | 2 |
| 3 | 00011 | 3 | 3 |
| 4 | 00100 | 4 | 4 |
| 5 | 00101 | 5 | 5 |
| 6 | 00110 | 6 | 6 |
| 7 | 00111 | 7 | 7 |
| 8 | 01000 | 10 | 8 |
| 9 | 01001 | 11 | 9 |
| 10 | 01010 | 12 | A |
| 11 | 01011 | 13 | B |
| 12 | 01100 | 14 | C |
| 13 | 01101 | 15 | D |
| 14 | 01110 | 16 | E |
| 15 | 01111 | 17 | F |
| 16 | 10000 | 20 | 10 |
| 17 | 10001 | 21 | 11 |
| 18 | 10010 | 22 | 12 |
| 19 | 10011 | 23 | 13 |
| 20 | 10100 | 24 | 14 |
| 21 | 10101 | 25 | 15 |
| 22 | 10110 | 26 | 16 |
| 23 | 10111 | 27 | 17 |
| 24 | 11000 | 30 | 18 |
| 25 | 11001 | 31 | 19 |
| 26 | 11010 | 32 | 1A |
| 27 | 11011 | 33 | 1B |
| 28 | 11100 | 34 | 1C |
| 29 | 11101 | 35 | 1D |
| 30 | 11110 | 36 | 1E |
| 31 | 11111 | 37 | 1F |
แปลงข้อความไทยเป็นเลขฐาน 2 (UTF-8)
คอมพิวเตอร์เก็บตัวอักษรเป็นตัวเลข แล้วเก็บตัวเลขนั้นเป็นเลขฐาน 2 อีกที เว็บและโทรศัพท์แทบทั้งหมดในตอนนี้ใช้มาตรฐาน UTF-8 พิมพ์ข้อความในช่องแรกเพื่อดูไบต์ของแต่ละตัว หรือวางเลขฐาน 2 ทีละ 8 บิตคั่นด้วยช่องว่างในช่องที่สองเพื่อแปลงกลับเป็นข้อความ
ทำไมอักษรไทยหนึ่งตัวใช้ 3 ไบต์ แต่ภาษาอังกฤษใช้ไบต์เดียว
UTF-8 ใช้จำนวนไบต์ไม่เท่ากันตามรหัส Unicode ของตัวอักษร ตามข้อกำหนด RFC 3629 รหัสตั้งแต่ U+0000 ถึง U+007F ใช้ 1 ไบต์ ช่วงนี้มี A–Z ตัวเลข และเครื่องหมายพื้นฐาน รหัสตั้งแต่ U+0800 ถึง U+FFFF ใช้ 3 ไบต์
อักษรไทยอยู่ในช่วง U+0E00 ถึง U+0E7F ทุกตัวจึงใช้ 3 ไบต์ ตัว ก มีรหัส U+0E01 เก็บเป็น
ส่วนตัว A มีรหัส U+0041 เก็บเป็นไบต์เดียวคือ 01000001 คำว่า "สวัสดี" มี 6 ตัว (ส ว ั ส ด ี) จึงยาว 18 ไบต์ หรือ 144 บิต
ไฟล์ไทยรุ่นเก่าบางไฟล์ใช้รหัส TIS-620 ซึ่งเก็บอักษรไทยตัวละ 1 ไบต์ ตัว ก ในรหัสนี้คือ A1 ถ้าเปิดไฟล์แบบนี้ด้วย UTF-8 ตัวหนังสือจะเพี้ยนเป็นสัญลักษณ์แปลกๆ เครื่องแปลงในหน้านี้ใช้ UTF-8 อย่างเดียว
คำถามที่พบบ่อยเรื่องเลขฐาน 2
1 ไบต์มีกี่บิต และนับได้ถึงเท่าไร
1 ไบต์มี 8 บิต เลขฐาน 2 ยาว 8 หลักเขียนได้ตั้งแต่ 00000000 ถึง 11111111 คือ 0 ถึง 255 รวม 256 ค่า
เลขฐาน 2 อ่านออกเสียงอย่างไร
อ่านทีละหลัก 101 อ่านว่า "หนึ่ง ศูนย์ หนึ่ง" ไม่อ่านว่าหนึ่งร้อยเอ็ด เพราะค่าจริงของมันคือ 5
รู้ได้อย่างไรว่าเลขฐาน 2 เป็นเลขคู่หรือเลขคี่
ดูหลักขวาสุด ถ้าเป็น 0 คือเลขคู่ ถ้าเป็น 1 คือเลขคี่ เพราะหลักอื่นมีค่าเป็นเลขคู่ทั้งหมด
เครื่องนี้แปลงเลขติดลบหรือทศนิยมได้ไหม
ยังไม่ได้ ใส่ได้เฉพาะจำนวนเต็มตั้งแต่ 0 ขึ้นไป แต่ใส่เลขยาวมากได้ เพราะเครื่องคำนวณด้วยจำนวนเต็มขนาดไม่จำกัดของเบราว์เซอร์ (BigInt)
ใส่ 0b หรือ 0x ข้างหน้าได้ไหม
ได้ ถ้าเลือกฐาน 2 พิมพ์ 0b1011 ได้ ฐาน 8 ใช้ 0o และฐาน 16 ใช้ 0x ตามแบบที่ภาษาโปรแกรมหลายภาษาใช้ ช่องว่างกับเครื่องหมาย _ ที่ใส่คั่นเพื่อให้อ่านง่ายก็ไม่เป็นปัญหา
อยากเห็นข้อมูลถูกแทนด้วยสัญญาณสองแบบในรูปอื่น ลองดูตัวแปลงรหัสมอสที่ใช้จุดกับขีด หรืออักษรเบรลล์ที่แต่ละจุดมีแค่นูนกับไม่นูน
แหล่งอ้างอิง
- วิกิพีเดียภาษาไทย. เลขฐานสอง นิยามและการแปลงระหว่างฐาน
- F. Yergeau. RFC 3629: UTF-8, a transformation format of ISO 10646 (2003) ตารางจำนวนไบต์ตามช่วงรหัส
- Unicode Consortium. Thai: Range 0E00–0E7F รหัส Unicode ของอักษรไทยทุกตัว
- Wikipedia. Thai Industrial Standard 620-2533 รหัส TIS-620 ที่ใช้ 1 ไบต์ต่ออักษรไทย