【问题标题】:How is an int function able to return long long variable?int 函数如何能够返回 long long 变量?
【发布时间】:2020-07-27 15:48:20
【问题描述】:
int reverse(int x) {
        if(x==0)
            return 0;
        int y = abs(x);
        long long result = 0;
        while(y > 0) {
            result *= 10;
            result += y % 10;
            y /= 10;
        }
        if(result > INT_MAX || result < INT_MIN)
            return 0;
        if(x<0) {
            return -result;
        }
        return result;
        
    }

此代码如何有效?很明显,result 是一个 long long 变量,但代码的返回类型是 int。代码仍然有效。

【问题讨论】:

  • 开启(增加)编译器的警告级别。
  • 你检查警告了吗?编译器可能会告诉您精度损失。
  • 如果result 等于INT_MIN,则返回-result 时将超出范围。

标签: c++ c++11 int long-integer


【解决方案1】:

如果值超出int的范围,返回值将被静默截断。

您的编译器可能有警告,您可以启用它来告诉您这一点。您应该启用它们(并要求它把警告变成错误恕我直言)。

【讨论】:

  • 我在 Leetcode 上解决了这个问题,但没有给出任何警告。
【解决方案2】:

所有数字类型之间都有implicit conversions。函数的return 是这些可能出现的地方。

对于long long -> int

如果目标类型是有符号的,如果源整数可以在目标类型中表示,则值不会改变。否则结果是实现定义的。 (注意这与有符号整数算术溢出不同,它是未定义的)。

在您显示的函数中,结果可以表示为int,除非在普通系统上-INT_MIN 大于INT_MAX

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2016-02-24
    • 2018-05-10
    • 2015-08-01
    相关资源
    最近更新 更多