C代码溢出

use*_*406 1 c

任何人都可以向我解释为什么这个代码打印"错误"?这仅出现最小的整数值.

int abs(int x) {
    int result = 0;
    if(x < 0)
        result = -1*x;
    else 
        result = x;

    return result;
}

int main() {

    printf("Testing abs... ");
    if (abs(-2147483648) != 2147483648)
        printf("error\n");
    else
        printf("success\n");
}
Run Code Online (Sandbox Code Playgroud)

cni*_*tar 7

因为对于32位整数有符号整数,使用二进制补码,您可以存储的最大数字是2147483647.

范围是-2147483648 2147483647.

你必须小心 - 溢出签名数字是未定义的行为.