java short如何判断是否需要进位

时间:2012-04-28 23:29:03

标签: java carryflag

如果我加或减两个短值,如何判断是否需要标记进位条件

2 个答案:

答案 0 :(得分:3)

您可以使用较大的类型(例如int)进行加法或减法,将其强制转换为short,然后测试强制转换是否会更改值。

int i = s1 + s2;
short s = (short)i;
if (i != s) { /* overflow */ }

答案 1 :(得分: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;
        }
}