边界值

转自  http://blog.csdn.net/todd911/article/details/9148351

如果要自己实现一个获取绝对值的函数,应该都没有问题,我这边也自己写了一个:

void myabs(int i){
if(i>=0){
printf(
"%d\n",i);
}
else{
     printf(
"%d\n",-i); } }


但是,这个函数真的没有问题吗?如果i的值为-2147483648,会怎样,我们来试下:

 

#include <stdio.h>    
void myabs(int i){  
     if(i>=0){  
        printf("%d\n",i);  
     }else{  
        printf("%d\n",-i);  
     }  
}  
  
int main(void){  
        int a = -2147483648;  
        myabs(a);  
        return 0;  
}  

上面代码编译后出现如下warning: 

unsigned.c: In function 'main':
unsigned.c:12:2: warning: this decimal constant is unsigned only in ISO C90 [enabled by default]

执行后的结果为:

-2147483648 

额,怎么没有变成正数呢。因为32位系统int的范围为-2147483648 ~ 2147483647,负数比正数可容纳的值大了1,

所以-2147483648取反后就无法保存在int型变量中了。

posted @ 2015-06-27 09:53  neteasefans  阅读(203)  评论(0编辑  收藏  举报