1、 问题描述:
当输入1234567899时会显示,溢出错误提醒。
2、分析原因:
在32位的编程环境中的int 型数字范围是-231~231-1;-231=-2147483648,231-1=2147483647;而当翻转后的数字在此范围之外的时候,就会发生溢出。
3、错误示范:
if(((x*10+*it))<INT_MIN||(x*10+*it)>INT_MAX)
{
return 0;
break;
}
else
x=x*10+*it;//即便判断了if并执行了if内容,此处仍然会报错
做到此处,我也是十分困惑,明明已经判断过了溢出,并设定了溢出出口,为啥还是会不对?
4、敲锣找怪:
- c语言中存在两类整数算术运算,有符号运算和无符号运算。
在无符号运算里,没有了符号位,所以是没有溢出的概念的。
所有的无符号运算都是以2的n次方为模。
如果算术运算符的一个操作数是有符号书,另一个是无符号数,那么有符号数会被转换为无符号数(表示范围小的总是被转换为表示范围大的),那么溢出也不会发生。
但是,当两个操作数都是有符号数时,溢出就有可能发生。而且溢出的结果是未定义的。
当一个运算的结果发生溢出时,任何假设都是不安全的(if不安全啊)
链接:出处 - c++中int型的最大最小表示: