Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จะตรวจจับจำนวนเต็มล้นใน C ++ ได้อย่างไร


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

unsigned int x, y;
unsigned int value = x + y;
bool overflow = value < x; // Alternatively "value < y" should also work

นี่เป็นเพราะว่าหาก x และ y เป็น int ที่ไม่ได้ลงชื่อทั้งสองตัวหากเพิ่มเข้าไปและโอเวอร์โฟลว์ ค่าของพวกมันจะต้องไม่มากกว่าค่าใดค่าหนึ่ง เนื่องจากจะต้องมากกว่าค่า unsigned int สูงสุดที่เป็นไปได้เพื่อให้สามารถล้อมและก้าวไปข้างหน้าได้ ค่าเหล่านี้

อีกวิธีหนึ่งคือพยายามเข้าถึงแฟล็กโอเวอร์โฟลว์ใน CPU ของคุณ คอมไพเลอร์บางตัวให้การเข้าถึงซึ่งคุณสามารถทดสอบได้ แต่นี่ไม่ใช่มาตรฐาน

มีวิธีอื่นในการบรรลุเป้าหมายนี้ แต่ให้ค่าประมาณเท่านั้น คุณสามารถตรวจสอบได้ที่นี่ - https://stackoverflow.com/a/199455/3719089