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

จะตรวจจับจำนวนเต็มล้นใน 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 ของคุณ คอมไพเลอร์บางตัวให้การเข้าถึงซึ่งคุณสามารถทดสอบได้ แต่นี่ไม่ใช่มาตรฐาน