abs的bug

作者: 0一缕星光0 | 来源:发表于2019-10-04 13:03 被阅读0次

在完成leetcode:783题时用到了

abs(Int.MIN_VALUE)

本以为应该返回Int.MAX_VALUE的,但是却仍然返回了Int.MIN_VALUE

println(Int.MIN_VALUE) 

// -2147483648

println(abs(Int.MIN_VALUE))

// -2147483648

探本溯源,发现在abs的源码里就有解释:

/**
 * Returns the absolute value of the given value [n].
 *
 * Special cases:
 *   - `abs(Int.MIN_VALUE)` is `Int.MIN_VALUE` due to an overflow
 *
 * @see absoluteValue extension property for [Int]
 */
@SinceKotlin("1.2")
@InlineOnly
public actual inline fun abs(n: Int): Int = nativeMath.abs(n)

还不满意,继续找:

/**/Android/sdk/sources/android-28/java/lang/Math.java
  * Note that if the argument is equal to the value of
  * {@link Integer#MIN_VALUE}, the most negative representable
  * {@code int} value, the result is that same value, which is
  * negative.
*/
public static int abs(int a) {
        return (a < 0) ? -a : a;
    }

终于在这里找到实现了,可是还不满意,仔细在分析下:
int的有效区间是[-2^{31}, 2^{31}-1],也就是[-2147483648,2147483647],这就意味着2147483648已经溢出了,相当于2147483647 + 1=Int.MAX_VALUE+1,而这个Int.MAX_VALUE在内存中是多少呢?

0b01111111_11111111_11111111_11111111

再给它加一是多少呢?

0b10000000_00000000_00000000_00000000

那么这个值是多少呢?答案就是Int.MIN_VALUE!!(这里涉及到补码
终于明白为什么这里会有一个StackOverFlow了!


参考:

相关文章

  • abs的bug

    在完成leetcode:783题时用到了 本以为应该返回Int.MAX_VALUE的,但是却仍然返回了Int.MI...

  • 目录

    关于ABS富文本关于审核时候以及其他时候出现的bug定位问题web APIruntime关联属性 练习UIDocu...

  • 宏定义

    关于ABS富文本 关于审核时候以及其他时候出现的bug定位问题 web API runtime关联属性 练习 UI...

  • python3内置函数

    abs() 函数 描述 abs() 函数返回数字的绝对值。 语法 以下是 abs() 方法的语法: abs( x ...

  • ABS

    一、定义 Asset Backed Securitization:以目标项目所拥有的资产为基础,以该项目资产的未来...

  • linux中shell变量$#,$@,$0,$1,$2的含义解释

    摘抄自:ABS_GUIDE 下载地址:http://www.tldp.org/LDP/abs/abs-guide....

  • MySQL语法(数学函数)

    函数 数学函数 1)abs( ) :取绝对值select abs(1.0),abs(-5.3) from dual...

  • Python内置函数

    python 内置函数 1.abs()#abs()绝对值abs(-1) -->1 2.all(iterable)#...

  • Oracle数据库开发——函数篇

    目录 1.ABS 返回指定值的绝对值SQL> select abs(100),abs(-100) from dua...

  • 【干货/宝典/函数】Netsuite公式函数大全

    ABS(n) The ABS function calculates the absolute value of...

网友评论

      本文标题:abs的bug

      本文链接:https://www.haomeiwen.com/subject/ekxspctx.html