今天发现代码里有如下的一个bug

unsigned int a,b;

int  c;

  c = a-b;

 

一般的情况下这段代码是没有什么问题的。

但是当b>0x80000000的时候就会出现bug

这时候尽管a<b,但是a-b不会小于0。

 

这时候a-b会出现错误的答案,但是a>b是没有问题的。

因为对于unsigned int来说,a>b是通过CF这个flag来判断的,而a-b要得到正确答案需要同时判断SF这个flag

 

参考

http://www.anqn.com/jiamijiemi/nixianggongchengjishu/2008-12-08/a09104356.shtml