รหัสมอส

รหัสมอส › เลขฐาน 2

เลขฐาน 2: แปลงเลขฐานสอง ฐาน 8 ฐาน 10 และฐาน 16 พร้อมวิธีทำ

เลขฐาน 2 (เลขฐานสอง หรือ binary) ใช้ตัวเลขแค่ 2 ตัว คือ 0 กับ 1 แต่ละหลักมีค่าเป็นสองเท่าของหลักทางขวา เช่น 1011 = 8 + 0 + 2 + 1 = 11 ใส่ตัวเลขในช่องด้านล่าง แล้วเลือกว่าเป็นเลขฐานอะไร เครื่องจะแปลงเป็นฐาน 2, 8, 10 และ 16 ให้พร้อมกัน และแสดงวิธีหาร 2 เอาเศษทีละบรรทัด

ฐาน 2101101
ฐาน 855
ฐาน 1045
ฐาน 162D
ลองตัวอย่าง:

วิธีแปลงเลขฐาน 10 เป็นเลขฐาน 2 แบบหาร 2 เอาเศษ

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

ใส่ตัวเลขด้านบนแล้ววิธีทำจะขึ้นตรงนี้

ตัวอย่างเขียนมือ แปลง 45 เป็นเลขฐาน 2

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

คำตอบคือ 45 ในฐาน 10 เท่ากับ 101101 ในฐาน 2 ข้อผิดที่เจอบ่อยที่สุดคืออ่านเศษจากบนลงล่าง ซึ่งจะได้ 101101 กลับด้าน ตัวอย่างนี้บังเอิญอ่านได้เหมือนกันทั้งสองทาง ลองกับเลข 6 จะเห็นชัดกว่า เศษคือ 0, 1, 1 อ่านจากล่างขึ้นบนได้ 110 ไม่ใช่ 011

วิธีแปลงเลขฐาน 2 เป็นเลขฐาน 10

ทางกลับใช้การกระจายหลัก หลักขวาสุดมีค่า 1 หลักถัดไปมีค่า 2, 4, 8, 16 เพิ่มเป็นสองเท่าทุกหลัก เอาค่าของหลักที่เป็น 1 มาบวกกัน หลักที่เป็น 0 ไม่ต้องนับ

ค่าประจำหลักของเลขฐาน 2 ตัวอย่าง 101101
ค่าประจำหลัก32168421
เลขฐาน 2101101

101101 จึงเท่ากับ 32 + 8 + 4 + 1 = 45 ค่าประจำหลักก็คือ 2 ยกกำลัง 0, 1, 2, 3 ไปเรื่อยๆ นับจากขวา

เลขฐาน 8 และเลขฐาน 16 เกี่ยวกับเลขฐาน 2 อย่างไร

8 คือ 2 ยกกำลัง 3 และ 16 คือ 2 ยกกำลัง 4 เลขฐาน 2 จึงแปลงเป็นสองฐานนี้ได้โดยไม่ต้องหารเลย

ในเลขฐาน 16 ตัวอักษร A ถึง F แทนค่า 10 ถึง 15 เลขฐาน 16 จึงย่อเลขฐาน 2 ยาวๆ ได้สั้นมาก หนึ่งไบต์ (8 บิต) เขียนด้วยเลขฐาน 16 แค่ 2 หลักพอดี โปรแกรมเมอร์จึงนิยมใช้เขียนรหัสสีในเว็บและค่าไบต์ในหน่วยความจำ

ตารางเลขฐาน 2 ของ 0–31

ตารางนี้เขียนเลขฐาน 2 ครบ 5 หลักเพื่อให้เทียบกันง่าย ศูนย์ที่เติมข้างหน้าไม่ทำให้ค่าเปลี่ยน 00101 กับ 101 คือ 5 เท่ากัน

ตารางเลขฐาน 2 ของ 0 ถึง 31
ฐาน 10ฐาน 2ฐาน 8ฐาน 16
00000000
10000111
20001022
30001133
40010044
50010155
60011066
70011177
801000108
901001119
100101012A
110101113B
120110014C
130110115D
140111016E
150111117F
16100002010
17100012111
18100102212
19100112313
20101002414
21101012515
22101102616
23101112717
24110003018
25110013119
2611010321A
2711011331B
2811100341C
2911101351D
3011110361E
3111111371F

แปลงข้อความไทยเป็นเลขฐาน 2 (UTF-8)

คอมพิวเตอร์เก็บตัวอักษรเป็นตัวเลข แล้วเก็บตัวเลขนั้นเป็นเลขฐาน 2 อีกที เว็บและโทรศัพท์แทบทั้งหมดในตอนนี้ใช้มาตรฐาน UTF-8 พิมพ์ข้อความในช่องแรกเพื่อดูไบต์ของแต่ละตัว หรือวางเลขฐาน 2 ทีละ 8 บิตคั่นด้วยช่องว่างในช่องที่สองเพื่อแปลงกลับเป็นข้อความ

ไบต์ UTF-8 ของแต่ละตัวอักษร
ตัวอักษรรหัส Unicodeไบต์เลขฐาน 2
ยังไม่มีข้อความ

ทำไมอักษรไทยหนึ่งตัวใช้ 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 เก็บเป็น

E0 B8 81 11100000 10111000 10000001

ส่วนตัว 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 ตามแบบที่ภาษาโปรแกรมหลายภาษาใช้ ช่องว่างกับเครื่องหมาย _ ที่ใส่คั่นเพื่อให้อ่านง่ายก็ไม่เป็นปัญหา

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

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

  1. วิกิพีเดียภาษาไทย. เลขฐานสอง นิยามและการแปลงระหว่างฐาน
  2. F. Yergeau. RFC 3629: UTF-8, a transformation format of ISO 10646 (2003) ตารางจำนวนไบต์ตามช่วงรหัส
  3. Unicode Consortium. Thai: Range 0E00–0E7F รหัส Unicode ของอักษรไทยทุกตัว
  4. Wikipedia. Thai Industrial Standard 620-2533 รหัส TIS-620 ที่ใช้ 1 ไบต์ต่ออักษรไทย