ตัวแปลงระบบตัวเลข พร้อมรองรับจำนวนเต็มลบ | BIN HEX DEC OCT

โลกของคอมพิวเตอร์ทำงานด้วยศูนย์และหนึ่ง แต่ผู้คนคิดเป็นเลขฐานสิบ แล้วนักพัฒนาล่ะ? พวกเขาต้องเข้าใจทุกอย่างที่อยู่ระหว่างนั้น ไม่ว่าคุณจะดีบั๊กโค้ดระดับต่ำ, ตั้งค่าสีใน CSS, คำนวณ IP masks หรือแก้ปัญหาในวิชาวิทยาการคอมพิวเตอร์ คุณก็ต้องแปลงตัวเลขระหว่างระบบฐานต่างๆ

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

ตัวแปลงระบบตัวเลขนี้ทำอะไรได้บ้าง?

ในการพัฒนาวิดเจ็ตนี้ เรามุ่งเน้นที่การแก้ไขปัญหาที่พบบ่อยที่สุดของนักพัฒนาโปรแกรม:

  1. ตอบสนองแบบเรียลไทม์: ไม่มีปุ่ม “คำนวณ” เพียงแค่เริ่มพิมพ์ลงในช่อง HEX คุณก็จะเห็นค่า BIN และ DEC เปลี่ยนแปลงทันที
  2. รองรับจำนวนลบ (Signed Integers): ตัวแปลงออนไลน์ส่วนใหญ่จะล้มเหลวเมื่อคุณพิมพ์ -5 แต่ของเราไม่เป็นเช่นนั้น ด้วยตัวเลือก ความกว้างบิต (8, 16, 32, 64 บิต) เราจำลองพฤติกรรมของโปรเซสเซอร์โดยใช้ Two’s Complement
  3. ความสามารถในการอ่านโค้ดไบนารี: การมอง 1110101011011110 ทำให้ปวดตา เครื่องมือของเราสามารถจัดรูปแบบเอาต์พุตโดยอัตโนมัติทุก 4 บิต (nibbles) เป็น 1110 1010 1101 1110 ซึ่งช่วยลดข้อผิดพลาดในการคัดลอกได้อย่างมาก
  4. รองรับ BigInt: ต้องการแปลงตัวเลข 64 บิต หรือค่าแฮชหรือไม่? JavaScript มาตรฐานจำกัดอยู่ที่ $2^{53}$ แต่เอนจินของเราสามารถจัดการตัวเลขที่มีความยาวเท่าใดก็ได้ในโหมด “Unsigned”

คู่มือระบบตัวเลข: ควรใช้แบบใดเมื่อใด?

1. เลขฐานสิบ (DEC - Decimal)

  • ฐาน: 10 (ตัวเลข 0-9)
  • การใช้งาน: ชีวิตประจำวัน, การเงิน, การนับวนลูปในโค้ด
  • ข้อเท็จจริง: คอมพิวเตอร์ไม่เข้าใจ ต้องแปลงเป็นไบนารีก่อน

2. เลขฐานสอง (BIN - Binary)

  • ฐาน: 2 (ตัวเลข 0, 1)
  • การใช้งาน: Machine code, Logical gates, การทำ IP masking
  • เคล็ดลับ: แต่ละหลักแทน 1 บิต 8 บิต เท่ากับ 1 ไบต์ (Byte)

3. เลขฐานสิบหก (HEX - Hexadecimal)

  • ฐาน: 16 (ตัวเลข 0-9, ตัวอักษร A-F)
  • การใช้งาน: การเขียนโค้ดไบนารีแบบกระชับ อักขระ HEX หนึ่งตัวแทน 4 บิต (nibble) สองอักขระ (เช่น FF) แทนไบต์เต็ม
  • ตัวอย่าง:
    • สีบนเว็บ: #FF5733 (แดง, เขียว, น้ำเงิน)
    • MAC Address: 00:1A:2B:3C:4D:5E
    • Memory dumps

4. เลขฐานแปด (OCT - Octal)

  • ฐาน: 8 (ตัวเลข 0-7)
  • การใช้งาน: คอมพิวเตอร์รุ่นเก่า, ปัจจุบันส่วนใหญ่ใช้ใน สิทธิ์ของ Linux (chmod)
  • ตัวอย่าง: คำสั่ง chmod 755 ตั้งค่าสิทธิ์เป็น rwx-rx-rx (อ่าน, เขียน, รัน)

วิธีจัดการกับจำนวนเต็มลบอย่างถูกต้อง?

นี่คือฟังก์ชันที่ซับซ้อนที่สุดของตัวแปลงของเรา ในหน่วยความจำคอมพิวเตอร์ไม่มีเครื่องหมาย “ลบ” ในการจัดเก็บจำนวนลบ คอมพิวเตอร์มักจะใช้วิธี Two’s Complement

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

ตัวอย่าง: ตัวเลข -5 มีลักษณะอย่างไร?

ลองด้วยตัวคุณเองในตัวแปลงของเรา:

  1. ตั้งค่าความกว้างเป็น 8-bit

    • ป้อนใน DEC: -5
    • ผลลัพธ์ HEX: FB
    • ผลลัพธ์ BIN: 1111 1011
    • คำอธิบาย: $256 - 5 = 251$ (ซึ่งคือ FB)
  2. ตั้งค่าความกว้างเป็น 16-bit

    • ป้อนใน DEC: -5
    • ผลลัพธ์ HEX: FFFB
    • คำอธิบาย: เนื่องจากมีพื้นที่มากขึ้น, “หนึ่ง” จะเติมเต็มพื้นที่ที่เหลือทางด้านซ้าย
  3. ตั้งค่าความกว้างเป็น เฉพาะจำนวนเต็มบวก (Unsigned)

    • หากคุณป้อน -5 ช่องจะเปลี่ยนเป็นสีแดง โหมดนี้ไม่รองรับจำนวนลบ เนื่องจากจะต้องการเลขหนึ่งจำนวนอนันต์

เคล็ดลับสำหรับมืออาชีพ: หากคุณทำงานกับสีหรือที่อยู่ IP ให้ใช้โหมด “เฉพาะจำนวนเต็มบวก” เสมอ หากคุณกำลังทำงานที่เกี่ยวข้องกับ C/C++ หรือ Assembler ให้เปลี่ยนเป็น 32-bit หรือ 64-bit


ตารางการแปลงอย่างรวดเร็ว (Cheat Sheet)

เพื่อการอ้างอิงอย่างรวดเร็ว นี่คือค่าพื้นฐานที่ “IT” ทุกคนควรรู้จำให้ขึ้นใจ

เลขฐานสิบ (DEC)เลขฐานสิบหก (HEX)เลขฐานสอง (BIN)หมายเหตุ
0000000ศูนย์
1010001
100A1010
150F1111ค่าสูงสุดสำหรับ 4 บิต (Nibble)
16100001 0000
1277F0111 1111ค่าสูงสุดสำหรับ signed 8-bit (char)
255FF1111 1111ค่าสูงสุดสำหรับ unsigned 8-bit (byte)
65 535FFFFค่าสูงสุดสำหรับ 16-bit

คำถามที่พบบ่อย (FAQ)

"ความลึกบิต" หมายความว่าอย่างไร? ระบุว่าเราได้สำรองหน่วยความจำไว้เท่าใดสำหรับตัวเลขนั้น
  • 8-bit: ค่า 0 ถึง 255 (หรือ -128 ถึง 127) เทียบเท่ากับประเภท char หรือ byte
  • 16-bit: ค่าสูงสุด 65,535 เทียบเท่ากับประเภท short
  • 32-bit: int มาตรฐานในภาษาโปรแกรมสมัยใหม่
  • 64-bit: สำหรับตัวเลขขนาดใหญ่มาก (long long, BigInt)
ทำไมตัวเลข 255 ใน HEX ถึงเขียนเป็น FF? เลขฐานสิบหกมี 16 หลัก (0-9 และ A-F) โดย F มีค่าเท่ากับ 15 ตัวเลข FF คำนวณได้ดังนี้: $(15 \times 16^1) + (15 \times 16^0) = 240 + 15 = 255$
จะแปลงสี HEX เป็น RGB ได้อย่างไร? สีบนเว็บ เช่น #E05412 ประกอบด้วยสามไบต์: แดง (E0), เขียว (54), น้ำเงิน (12) ป้อน "E0" ในช่อง HEX ของตัวแปลงของเรา -> คุณจะได้ 224 ป้อน "54" -> คุณจะได้ 84 ป้อน "12" -> คุณจะได้ 18 ผลลัพธ์คือ rgb(224, 84, 18)
0x, 0b หรือ 0o หมายถึงอะไร? เพื่อให้นักพัฒนาแยกแยะระบบตัวเลข พวกเขาใช้คำนำหน้าดังนี้:
  • 0x = เลขฐานสิบหก (เช่น 0xFF)
  • 0b = เลขฐานสอง (เช่น 0b101)
  • 0o = เลขฐานแปด (เช่น 0o755)
ตัวแปลงของเราจะรู้จักสัญลักษณ์เหล่านี้ แต่ไม่จำเป็นต้องพิมพ์
ทำไมช่องถึงเปลี่ยนเป็นสีแดง? นี่คือฟังก์ชันตรวจสอบความถูกต้องของข้อมูล ซึ่งหมายความว่าคุณได้ป้อนอักขระที่ไม่เป็นของระบบตัวเลขนั้นๆ ตัวอย่างเช่น:
  • ตัวอักษร "G" ใน HEX (อนุญาตเฉพาะ A-F)
  • ตัวเลข "2" ใน BIN (อนุญาตเฉพาะ 0 และ 1)
  • ตัวเลข "8" ใน OCT (อนุญาตเฉพาะ 0-7)
แก้ไขข้อผิดพลาดในการพิมพ์ แล้วการคำนวณจะดำเนินต่อไป