C言語なら俺に聞け(入門篇) Part 34
at TECH
465:デフォルトの名無しさん
08/08/20 01:37:58
>>461 の修正版
int add(int a, int b, int *p_is_overflow){
int chk_type, result, is_overflow=0;
chk_type=(a<0)*2+(b<0);
result=a+b;
switch(chk_type){
case 0: if(result<0) is_overflow=1; break; // a, b ともに 0 以上なので解も 0 以上になるべき
case 3: if(result>=0) is_overflow=1; break; // a, b ともに 0 未満なので解も 0 未満になるべき
}
if(p_is_overflow) *p_is_overflow=is_overflow;
return result;
}
掛け算は a*b/b==a をチェックすればいい
整数同士の除算は一つの例外を除いてオーバーフローしない (0div はあるけど)
次ページ続きを表示1を表示最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5505日前に更新/113 KB
担当:undef