码迷,mamicode.com
首页 > 其他好文 > 详细

边界值

时间:2015-06-27 11:24:17      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:

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

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

 

[cpp] view plaincopy
 
  1. void myabs(int i){  
  2.         if(i>=0){  
  3.                 printf("%d\n",i);  
  4.         }else{  
  5.                 printf("%d\n",-i);  
  6.         }  
  7. }  


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

 

 

[cpp] view plaincopy
 
  1. #include <stdio.h>  
  2.   
  3. void myabs(int i){  
  4.         if(i>=0){  
  5.                 printf("%d\n",i);  
  6.         }else{  
  7.                 printf("%d\n",-i);  
  8.         }  
  9. }  
  10.   
  11. int main(void){  
  12.         int a = -2147483648;  
  13.         myabs(a);  
  14.         return 0;  
  15. }  


上面代码编译后出现如下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型变量中了。

边界值

标签:

原文地址:http://www.cnblogs.com/QingCHOW/p/4603653.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!