整数反转场景下两类表达式的存储数据类型问询
问题:整数反转边界判断的表达式类型疑问
- 第一段代码无法按预期运行,原因是存储表达式的数据类型为整数,当结果大于
INT_MAX时会引发整数溢出:if(y*10+modulo>INT_MAX) return 0; - 第二段代码在遇到相同边界情况时可正常执行(其中
y、j为整数,a为整数向量),请问存储该表达式的数据类型是什么?if( y+a[i]*pow(10,j)>INT_MAX) return 0;
补充背景:两段代码均用于实现整数反转功能,a[i]存储输入数字的逆序各位,j初始值为a的大小减1。以3位数123为例,其反转后的计算逻辑为1 * 10^2 + 2 * 10^1 + 3*10^0。提问前已尝试谷歌搜索及AI问答。
解答
该表达式的存储类型是double(双精度浮点数),具体原因如下:
- 标准库函数
pow(10,j)的返回值本身就是double类型 - 表达式计算时会触发隐式类型转换:
- 整数类型的
a[i]会先转换为double,和pow(10,j)的结果相乘,得到double类型的中间值 - 整数类型的
y同样会转换为double,与上述中间值相加,最终整个表达式的结果为double类型
- 整数类型的
- double类型的取值范围远大于
INT_MAX(通常INT_MAX为231-1≈2.1e9,而double可精确表示253以内的整数),因此在整数反转的场景下,该表达式不会因超出范围溢出,能正常与被转换为double的INT_MAX比较,正确判断边界情况。
内容的提问来源于stack exchange,提问作者Diplo2
相关产品推荐
相关产品推荐

