整数溢出在 Swift 中给出 EXC_BAD_INSTRUCTION

Posted

技术标签:

【中文标题】整数溢出在 Swift 中给出 EXC_BAD_INSTRUCTION【英文标题】:Integer overflow gives EXC_BAD_INSTRUCTION in Swift 【发布时间】:2015-07-14 21:18:44 【问题描述】:

在玩 Swift 时,我注意到当 64 位整数溢出时,我收到以下错误:

file:///Users/user/Documents/playground/MyPlayground.playground/:错误:Playground 执行中止:执行被中断,原因:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)。

func fibonacci(which: Int) -> (fibOf: Int, isEqualTo: Int) 
    var i = 1, j = 1

    for var k = 2; k < which; k += 1 
        let tmp = i + j // this line is highlighted when error occurs
        j = i
        i = tmp
    

    return (which, i)


print (fibonacci(92))
print (fibonacci(93)) // this triggers an error

第一次调用,即以 92 作为参数,将运行良好。然而,当提供 93 值时,我得到了不相关的 EXC_BAD_INSTRUCTION 错误。这是一个错误还是什么?通常我希望它会溢出。

【问题讨论】:

我通过谷歌搜索“Swift integer overflow”找到了这个:developer.apple.com/library/ios/documentation/Swift/Conceptual/… 【参考方案1】:

这是预期的行为。如果要溢出,需要使用overflow operators。

溢出加法(&amp;+) 溢出减法(&amp;-) 溢出乘法 (&amp;*)

【讨论】:

嗯,我明白了。虽然不直观的错误消息。谢谢

以上是关于整数溢出在 Swift 中给出 EXC_BAD_INSTRUCTION的主要内容,如果未能解决你的问题,请参考以下文章

存储到“UInt”中时整数文字溢出

Int数据溢出的检查 leetcode7

整数翻转C++实现 java实现 leetcode系列

[LeetCode] 整数反转

整数反转

7.整数反转Java版,每日一题系列(此题来自力扣网)