今天发现代码里有如下的一个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
loop's blog