@oregon
La soluzione di IfNotFalseTrue rientra tra quelle alle quali ti riferisci?
@IfNotFalseTrue
Forte! Anche perché, se ho capito bene, a quel modo puoi usare il procedimento sia in ambiente a 32 bit ma anche a 16, o 64 o addirittura 8 bit (purché compilatore e librerie standard siano adeguate).
Due cose...
La prima: (a ^ b) < 0 serve a verificare se il segno è positivo o negativo, vero? Se e' così, mi sfugge perché non hai usato un più sempice (da leggere) (a>=0)&&(b>=0). Se non è così, mi spieghi a cosa serve?
La seconda: può andar bene anche fare una macro così?
#define IS_OVERFLOW(a,b) ((int)a^(int)b)<0?0:((int)a>0?((int)b>(INT_MAX-(int)a)):((int)b<(INT_MIN-(int)a)))
// tutti quei cast a int sono indispensabili, in questo caso?
Nelle intenzioni dovrebbe restituire 0 se a e b si possono sommare senza andare in
overflow, e 1 se invece sommarli porta a un
overflow.