如何使用X ++检测int64变量中的整数溢出

时间:2014-07-22 14:35:58

标签: overflow axapta x++ dynamics-ax-2012

有可靠的方法用X ++检测int64变量中的整数溢出吗?

示例:

int64 n;

n = 0x7FFFFFFFFFFFFFFF;

n += 1;

info(int642str(n));

参考:

Integers [AX 2012]

How to detect double precision floating point overflow and underflow?

1 个答案:

答案 0 :(得分:0)

来自here的改编代码:

int64 a, b;

#localmacro.ABS_INT
    (%1 < 0 ? 0 - %1 : %1)
#endmacro

a = 0x7FFFFFFFFFFFFFFF;

b = 1;



if ( ((a < 0) == (b < 0)) && (#ABS_INT(b) > int64Max() - #ABS_INT(a)))
{        
    throw error(strFmt("Integer overflow in %1.", funcName()));    
}    

a += b;

info(int642str(a));