Przepelnienie typu - jak sprawdzic?

0

mam problem, chcialbym sprawdzic czy czasem nastapilo przepelnienie typu, a konkretnie np. int . Slyszalem ze mozna to jakos asemblerowo wstawic, ale jesli mozna to prosilbym pod C.

0

po przepelnieniu int'a zaczyna on liczyc od poczatku, a wiec zapewne pojawi ci sie liczba ujemna, chyba ze przepelniisz go o ponad 33000 :]

Moze to ci pomoze.

0

nie za bardzo, typ moze sie przekrecic i moze byc dodatni... to sie sprawdza jakos na bitach lub na poziomie asemblera, ale nie wiem jak :|

0

to troszke nie tak

Chodzi o sprawdzenie flagi c (carry) lub o (overflow - mój faworyt) - nie wiem ktorej dokładnie poprobuj. Z poziomu assemblera najprosciej chyba wykonać skoki warunkowe : jc/jnc (gdzy wystąpiło przeniesienie/ n - nie wystąpiło) i jo/jno (wystąpiło przepełnienie/nie wystąpiło).

mox ax,65535
inc ax ; inc nie zmienia flagi carry, stad ogólnym faworytem: overflow
jo @overflow ; jc @carry

@carry:
 ; kod po przeniesieniu

@overflow:
 ; kod po przepelnieniu
0

Nie podałeś kompilatora, systemu, procesora...

W GCC jest niby flaga -ftrapv (traps overflow), ale pod MinGW chyba nie działa(?). Na Linuxie powinno działać...

Rozwiązanie w asm dla GCC:
http://article.gmane.org/gmane.comp.gcc.help/10677

Trochę informacji:
http://www.fortran-2000.com/ArnaudRecipes/CompilerTricks.html#Comp_inte

1 użytkowników online, w tym zalogowanych: 0, gości: 1