0

2 つの short 値を加算または減算する場合、キャリー条件にフラグを立てる必要があるかどうかをどのように判断できますか?

4

2 に答える 2

3

などのより大きな型を使用して加算または減算を実行し、intそれを にキャストしてshort、キャストによって値が変更されるかどうかをテストできます。

int i = s1 + s2;
short s = (short)i;
if (i != s) { /* overflow */ }
于 2012-04-28T23:32:24.530 に答える
0

加算と減算のみの場合、両方のオペランドが正で結果が負の場合、またはその逆の場合に算術オーバーフローが発生しました。

class OverflowTest
{
        public static void main (String[] args)
        {
                System.out.println(isOverflow((short)32767, (short)32767, '+'));
                System.out.println(isOverflow((short)-32767, (short)-32767, '+'));
                System.out.println(isOverflow((short)32767, (short)-32767, '+'));       
        }

        private static boolean isOverflow(short a, short b, char op) {  
                short c = (op == '+') ? (short)(a+b) : (short)(a-b);
                if((a > 0 && b > 0 && c < 0) || (a < 0 && b < 0 && c > 0))
                        return true;
                return false;
        }
}
于 2012-04-28T23:42:03.827 に答える