最开始写了一个判断数字是否为Tmax的函数,如下:
int isMax(int x)
{
return (x + 1) == (1 << 31);
}
但是当参数为0x7fffffff时,却仍然返回0,甚至出现了下列离谱情况:
搜寻原因未果,遂看了下汇编代码:
合着是这个地方直接被编译器给编译没了,又按照这句表达式最原本的意思写了段asm代码,发现问题就是出在编译器这里。
这说明,按照编译器的理解,一个int类型的整数加上1的结果不可能是Tmin,所以才直接返回了0。即,编译器在这个地方没有考虑整数溢出的结果。(以后绝对不能再想当然了,在这个地方卡了好久😭)