目录
问题:无法解释代码问题
出现场景:Leetcode07 整数反转
int reverse(int x){
long ret = 0;
while (x){
ret = ret * 10 + (x % 10);
x = x/10;
}
/* ------------------------------------------------------------------------- */
return (ret > ~((long)1<<31) || ret < ((long)1<<31))?0:ret;
/* ------------------------------------------------------------------------- */
}
上述代码运行报错,但是下述代码成立(将上述代码的大于号与小于号互换,成立)
int reverse(int x){
long ret = 0;
while (x){
ret = ret * 10 + (x % 10);
x = x/10;
}
/* ------------------------------------------------------------------------- */
return ret < INT_MIN || ret > INT_MAX?0:ret;
/* ------------------------------------------------------------------------- */
}
本文分析了LeetCode题目07整数反转中,代码报错的原因,重点在于理解`ret > ~((long)1<<31)`与`ret < ((long)1<<31)`的判断逻辑,并展示了互换条件后的正确代码。通过实例揭示了溢出和数值范围检查在编程中的重要性。
362

被折叠的 条评论
为什么被折叠?



