Swift不允許整型變量或者常量被賦值一個超出其表數范圍的數值,如果試圖這么干,則會出現運行時錯誤:
屏幕快照 2016-07-25 上午11.37.24.png
如果希望數據溢出時Swift程序只是對一出的數據位進行截斷而不是導致錯誤,則可以使用以&開頭的溢出運算符:
溢出加法 &+
溢出減法 &-
溢出乘法 &*
溢出除法 &/
溢出求余 &%
值的上溢
下面例子使用了溢出加法&+來處理無符號整數的上溢出:
屏幕快照 2016-07-25 上午11.38.24.png
max用Int8所能承載的最大值255(二進制11111111),然后用&+加1。然后UInt8就無法表達這個新值的二進制了,也就導致了這個新值上溢出了,大家可以看下圖。溢出后,新值在UInt8的承載范圍內的那部分是00000000,也就是0。
屏幕快照 2016-07-25 上午11.39.10.png
值的下溢
數值也有可能因為太小而越界:
屏幕快照 2016-07-25 上午11.39.46.png
UInt8的最小值是0(二進制為00000000)。使用&-進行溢出減1,就會得到二進制的11111111即十進制的255。
屏幕快照 2016-07-25 上午11.40.12.png
除零溢出
整數和整數在進行除法或者求余運算時,如果被除數為0,程序將會出錯:
屏幕快照 2016-07-25 上午11.40.49.png