ส่วนล้น

ส่วนล้น () คือ การที่นำเลขสองจำนวน (เลขทั้งสองจำนวนเป็นตัวเลขแบบคิดเครื่องหมาย “Signed Number”) มาทำการบวกหรือลบกันแล้วผลลัพธ์ที่ได้ออกมานั้นอยู่นอกขอบเขตที่จำนานของบิตสามารถรับได้ ทำให้ผลลัพธ์ที่ได้ออกมานั้นเกิดการผิดพลาด

 กรณีของการเกิด Overflow 
กรณีที่ 1 คือ การนำจำนวนบวกสองจำนวนมาบวกกัน

ตัวอย่าง เช่น นำ 50 (0011 0010) กับ 120 (0111 1000) บวกกัน

ผลลัพธ์ที่ได้ของเลขฐานสิบก็คือ 170 ถ้าเราบวกกันโดยตรงจะได้ผลลัพธ์ คือ 1010 1010 จะเห็นว่าผลลัพธ์ บิตแรก เป็น 1 ซึ่งหมายความว่า เป็นจำนวนลบ แต่ในความจริงแล้วผลลัพธ์เป็นจำนวนบวก การเกิด Overflow นี้ทำให้คำตอบผิดพลาด

กรณีที่ 2 คือ การนำจำนวนลบสองจำนวนมาบวกกัน

ตัวอย่าง เช่น นำ -85 (1010 1011) กับ -95 (1010 0001) บวกกัน

ผลลัพธ์ที่ได้ของเลขฐานสิบก็คือ -180 ถ้าเราบวกกันโดยตรงจะได้ผลลัพธ์ คือ 1 0100 1100 

แต่ในผลลัพธ์แบบ 8 บิต จะแสดงคำตอบได้ เพียงแค่ 0100 1100 จะเห็นว่าผลลัพธ์ บิตแรก เป็น 0 ซึ่งหมายความว่า เป็นจำนวนบวก แต่ในความจริงแล้วผลลัพธ์เป็นจำนวนลบ ทำให้คำตอบที่ได้นั้นผิดพลาดจากในกรณีที่ 2 ถ้าเราต้องการบวกค่าที่ได้ผลลัพธ์ออกมามีบิตเกินกว่าขอบเขตที่กำหนด เราควรเพิ่มบิตให้มากขึ้นเพื่อให้คำตอบที่ออกมานั้นถูกต้อง จากตัวอย่าง ควรเพิ่มบิตจาก 8 บิต เป็น 16 บิต

ปัญหาการเกิด Overflow เป็นปัญหาที่เกิดจาก Software ไม่ใช่ปัญหาที่เกิดจาก Hardware โปรแกรมเมอร์นั้นจะต้องทดสอบการเกิด Overflow หลังจากบวกหรือลบแล้ว โดยต้องทำการตรวจสอบและเปลี่ยนแปลงของบิตเครื่องหมาย และโปรแกรมเมอร์เองก็ควรที่จะเขียนคำสั่งไว้สำหรับเปรียบเทียบบิตเครื่องหมายของทั้งสองจำนวนที่จะบวกกันไว้ด้วย เพื่อคอมพิวเตอร์จะได้เผื่อบิตไว้ใช้ในการคำนวณได้ และผลลัพธ์ที่ได้จะได้มีความถูกต้องแม่นยำ

หมวดหมู่:วงจรดิจิทัล
หมวดหมู่:วิทยาการคอมพิวเตอร์