egész túlcsordulás
egész túlcsordulás
Y ou már tudják, hogy a túl több mint előfordulhat túlcsordulás. A fogás, hogy a számítógép nem ad ki figyelmeztetést overflow: a program továbbra is működni fog helytelen információt. Sőt, a viselkedését a túlfolyó határozza csak egész jel nélkül.
Túlcsordulás vezethet súlyos problémák: visszaállítás és az adatvesztés, kihasználhatjuk finom hibákat, amelyek idővel felhalmozódik.
Vegyünk egy pár trükköt nyomkövető túlfolyó aláírt az egész és egész túlcsordulás aláírva.
1. Pre-érvényesítés. Tudjuk limits.h fájl, a legnagyobb és a legkisebb érték a szám int típusú. Ha mindkét szám pozitív, hogy összegük nem haladja INT_MAX, ha INT_MAX különbség, és az egyik szám kisebb, mint a második számot. Ha mindkét szám negatív, akkor a különbség INT_MIN és az egyik szám nagyobbnak kell lennie, mint a másik. Ha mindkét szám különböző jeleket, akkor egyértelmű, hogy az összeg nem haladja meg a INT_MAX vagy INT_MIN.
Ebben a funkcióban a változó túlcsordulás lesz állítva 1, ha volt egy túlcsordulás. A függvény visszaküldi az összeget, függetlenül attól, hogy az összeadás eredménye.
2. A második módszer a vizsgálat -, hogy az összeg típusát, a maximális (és minimum) értéket, amely minden bizonnyal nagyobb, mint az összeg két egész szám. Az adagolás befejezése után ellenőrizni kell, hogy az összeg nem volt több. INT_MAX vagy kisebb INT_MIN.
Megjegyzés az explicit öntött. Enélkül első történik túlcsordulás, és téves szám van írva, hogy a c változó.
3. A harmadik módszer ellenőrzésére platformtól, sőt, annak megvalósításához más lesz a különböző fordítóprogramok. Amikor túlfolyó egészek (általában) fekvő túlcsordulás zászló zászlók regisztráljon. Meg tudja nézni az értéket szerelő zászló után azonnal az összegzésben.
Itt noOverflow változó értéke 1, ha nincs túlcsordulás. JNO (ugrás ha nincs túlcsordulás) végez egy ugrás a címkére NO_OVERFLOW, ha nincs túlcsordulás. Ha a túlfolyó Ezután elvégezzük
Kezelése előjel nélküli egész sokkal egyszerűbb: túlcsordulás nulla, és köztudott, hogy a kapott szám minden bizonnyal kevésbé minden távon.
Itt van a teljes kód, a vizsgálatokat.
ru-Cyrl 18- bemutató Sypachev S. S. 1989/04/14 [email protected] Stepan Sypachev diákok