CodeQuiz EP.19 - ทำไมจำนวนเต็มใน C/C++ ถึงมากที่่สุดที่ 2^31 - 1

พี่ปาล์ม ชิติพัทธ์
เผยแพร่เมื่อ
อัปเดตล่าสุดเมื่อ

📌 สาระสำคัญ
- คอมพิวเตอร์เก็บข้อมูลในรูปแบบ เลขฐานสอง (Binary) เช่น 110, 1010
- ในคอมพิวเตอร์ เราเรียกแต่ละหลักของเลขฐานสองว่า bit
- ค่าสูงสุดของจำนวนเต็ม 2^31 - 1 = 2,147,483,647
- วิธีการใช้บิตซ้ายสุดเก็บเครื่องหมาย เรียกว่า Sign Magnitude
🤖เกริ่นเล็ก ๆ น้อย ๆ
ในคอมของเราจะเก็บเลขต่าง ๆ เอาไว้ในรูปแบบ "เลขฐานสอง (Binary)" และรับบเลขปกติที่เราใช้อยู่ทุกวันคือ "เลขฐานสิบ"
ตัวอย่าง 6 และ 18 ในเลขฐานสอง

ในทางคอมพิวเตอร์เราจะเรียกว่า bits เช่น 110 มี 3 หลักเรียกว่า 3 bits
Note ไว้ว่า: 1 byte = 8 bits
และส่วนใหญ่เราใช้ byte ในการบอกว่า โปรแกรม, ไฟล์ หรือ ตัวแปร อะไรสักอย่างมีขนาดเท่าไหร่
เราลองให้ตัวแปรของเรามีขนาด 3 bits (ยกตัวอย่างง่ายดี) เราจะได้ว่า

ทีนี้เรารู้แล้วว่าถ้าเรามี 3 bits ค่าที่เป็นไปได้ทั้งหมดคือ 0 ถึง 7 แล้วถ้าเรามี n bits ล่ะเราจะได้ว่า

🔍ไขข้อสงสัย
หลังจากที่เราได้ปูพื้นฐานแล้วว่าถ้าจำนวน bit ของเราเพิ่มมากขึ้นค่าที่เป็นไปได้ก็จะเพิ่มมากขึ้น
มาดูจำนวนเต็มในภาษา C/C++ กันเรารู้แล้วว่าคอมจะเก็บข้อมูลในจำนวนของ byte และจำนวนเต็ม(int)ในภาษา C/C++ จะเก็บได้แค่ 4 bytes หรือ 32 bits นั้นเอง
ถ้าอย่างงั้นค่าสูงสุดที่เป็นไปได้คือ 2^32 - 1 น่ะสิ งั้นทำไมค่าสูงสุดคือ 2^31 - 1 ล่ะ
จริง ๆ แล้วแล้วเราจำเป็นต้องใช้ 1 bit ตัวซ้ายที่สุดเอาไว้เก็บเครื่องหมาย +, - ยังไงล่ะ

Note: การแทนจำนวนลบด้วยการเอา bit ซ้ายสุดมาเป็นแทนเครื่องหมายเรียกว่า Sign magnitude ซึ่งจริง ๆ ในทางปฏิบัติจะใช้อีกแบบนึงแบบโดยพื้นฐานแล้วแบบนี้เข้าใจง่ายดี
เพราะฉะนั้นเราได้ว่าค่าสูงสุดของเราคือ 2^31 - 1 และค่าต่ำสุดคือ -2^31 - 1 ( จริง ๆ ค่าต่ำสุดตรงนี้ต้องบอกไว้ก่อนว่ามันคือ 2^31 แต่เพื่อกันสับสนเอาเป็นว่าเอาแบบนี้ไปก่อน 555555 )
บทความที่เกี่ยวข้อง
- วิชาการความรู้
CodeQuiz EP.22 - คอมเตอร์คูณเลขยังไง?
พี่ปาล์ม ชิติพัทธ์
เผยแพร่เมื่อ
- วิชาการHackathon
หลักสูตรใหม่ของ Leagues of Code TH
พี่ปาล์ม ชิติพัทธ์
เผยแพร่เมื่อ
ภาษา HTML คืออะไร?
พี่อาร์ม พัทธดนย์
เผยแพร่เมื่อ