c int 溢出问题

我写了如下代码:

#include <stdio.h>
#include <math.h>

int main(void){
    int a = -10;

    printf("%d\n", fabs(a)); // -789819000
    return 0;
}

我发现不对,我又改了一下:

#include <stdio.h>
#include <math.h>

int main(void){
    signed int a = -10;

    printf("%d\n", fabs(a)); // 2117194024
    return 0;
}

我接着改:

#include <stdio.h>
#include <math.h>

int main(void){
    signed int a = -10;

    printf("%u\n", fabs(a)); // 557536920
    return 0;
}

请问我到底应该怎么写?

才能显示为10

阅读 3.2k
3 个回答

fabs是针对浮点数的,返回的结果是个float类型,abs才是针对整数的。

你要不改成abs的话,可以在结果之前转成int

printf("%dn", (int)fabs(a));

而且这个还会把你的a强转成float

#include <stdio.h>
#include <math.h>

int main(void){
    int a = -10;

    printf("%d\n", (int) fabs(a));
    return 0;
}
int a = -10;
printf("%f\n", fabs(a));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进