默认情况下,当你往一个整型常量或变量赋于一个它不能承载的大数时,Swift不会让你这么干的,它会报错。这样,在操作过大或过小的数的时候就很安全了。

例如,Int16整型能承载的整数范围是-3276832767,如果给它赋上超过这个范围的数,就会报错:

var potentialOverflow = Int16.max
// potentialOverflow 等于 32767, 这是 Int16 能承载的最大整数
potentialOverflow += 1
// 噢, 出错了

对过大或过小的数值进行错误处理让你的数值边界条件更灵活。

当然,你有意在溢出时对有效位进行截断,你可采用溢出运算,而非错误处理。Swfit为整型计算提供了5个&符号开头的溢出运算符。

  • 溢出加法 &+
  • 溢出减法 &-
  • 溢出乘法 &*
  • 溢出除法 &/
  • 溢出求余 &%

值的上溢出

下面例子使用了溢出加法&+来解剖的无符整数的上溢出

var willOverflow = UInt8.max
// willOverflow 等于UInt8的最大整数 255
willOverflow = willOverflow &+ 1
// 这时候 willOverflow 等于 0

willOverflowInt8所能承载的最大值255(二进制11111111),然后用&+加1。然后UInt8就无法表达这个新值的二进制了,也就导致了这个新值上溢出了,大家可以看下图。溢出后,新值在UInt8的承载范围内的那部分是00000000,也就是0

值的下溢出

数值也有可能因为太小而越界。举个例子:

UInt8的最小值是0(二进制为00000000)。使用&-进行溢出减1,就会得到二进制的11111111即十进制的255

Swift代码是这样的:

var willUnderflow = UInt8.min
// willUnderflow 等于UInt8的最小值0
willUnderflow = willUnderflow &- 1
// 此时 willUnderflow 等于 255

有符整型也有类似的下溢出,有符整型所有的减法也都是对包括在符号位在内的二进制数进行二进制减法的,这在 "按位左移/右移运算符" 一节提到过。最小的有符整数是-128,即二进制的10000000。用溢出减法减去去1后,变成了01111111,即UInt8所能承载的最大整数127

来看看Swift代码:

var signedUnderflow = Int8.min
// signedUnderflow 等于最小的有符整数 -128
signedUnderflow = signedUnderflow &- 1
// 如今 signedUnderflow 等于 127

除零溢出

一个数除于0 i / 0,或者对0求余数 i % 0,就会产生一个错误。

let x = 1
let y = x / 0

使用它们对应的可溢出的版本的运算符&/&%进行除0操作时就会得到0值。

let x = 1
let y = x &/ 0
// y 等于 0

Swift溢出运算符相关推荐

  1. swift:高级运算符(位运算符、溢出运算符、优先级和结合性、运算符重载函数)...

    swift:高级运算符 http://www.cocoachina.com/ios/20140612/8794.html 除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和 ...

  2. Swift 高级运算符

    本文转载至 http://my.oschina.net/sunqichao/blog?disp=2&catalog=0&sort=time&p=2 除了基本操作符中所讲的运算符 ...

  3. swift_013(Swift 的运算符)

    //***********swift学习之13--运算符--*************************** // 本章节主要学习算术运算符.关系运算符.逻辑运算符.位运算符.赋值运算符及其他运 ...

  4. Swift 基本基本运算符

    Swift 1,赋值运算符 Swift赋值表达式是没有值的,不支持连续赋值. 2,算术运算符 除数可为0 var f=1/0.0 求余的结果的正负取决于被除数 3,溢出运算符* 根据二进制来进行计算 ...

  5. Swift傻傻分不清楚系列(四)基本运算符 o_O!???

    本页包含内容: 术语 赋值运算符 算术运算符 组合赋值运算符 比较运算符 三目运算符 空合运算符 区间运算符 逻辑运算符 运算符是检查.改变.合并值的特殊符号或短语.例如,加号(+)将两个数相加(如  ...

  6. Swift中文教程(二十三) 高级运算符

    除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和Objective-C中的位运算符和移位运算. 不同于C语言中的数值计算,Swift的数值计算默认是不可溢出的.溢出行为会 ...

  7. Swift中文教程(二)基本运算符

    1.基本运算符 运算符是一种特定的符号或表达式,用来检验.修改或合并变量.例如,用求和运算符+可以对两个数字进行求和(如let i = 1 + 2):稍微复杂一点的例子有逻辑与操作符&& ...

  8. 窥探Swift之需要注意的基本运算符和高级运算符

    之前更新了一段时间有关Swift语言的博客,连续更新了有6.7篇的样子.期间间更新了一些iOS开发中SQLite.CollectionViewController以及ReactiveCocoa的一些东 ...

  9. Swift快速入门(三)运算符

    相关文章 Swift快速入门(一)第一个Swift程序 Swift快速入门(二)基本数据类型 1.赋值运算符 赋值运算(a = b),表示用b的值来初始化或更新a的值: var b = 10 var ...

最新文章

  1. 如何用matlab分析chipscope的数据
  2. Redis 命令--Redis哈希(hash)
  3. mysql语句中事务可靠性_MYSQL中的事务
  4. Windows10——荣耀笔记本任务栏图标显示异常且无显示/隐藏图标的箭头解决方案
  5. 小木棍(信息学奥赛一本通-T1442)
  6. linux查看nec进程状态,【linux】 /proc/PID/stat
  7. 【agc004d】Teleporter
  8. easyui-datagrid 列单击事件
  9. Error: could not open `C:\Program Files\Java\jre6\lib\i386\jvm.cfg')
  10. 多所985、211高校教授被通报!国自然发布处理决定!
  11. 《the django book》part2 django的安装使用
  12. 推荐vs code十大强大的插件!
  13. JUC的常用辅助工具
  14. 测试用例的设计-提高测试覆盖率
  15. python: 内建函式round() 是四舍五入还是五舍六入?
  16. C/C++结构体struct详解
  17. PCI设备的访问方法_桥设备(type1)
  18. 定时器控制LED闪烁
  19. sql trim函数_SQL TRIM函数
  20. 尚硅谷在线教育项目的坑

热门文章

  1. Cell Research封面 | 刘志华组揭示肠道菌群可促进胰岛素的分泌
  2. Gut-2018-菌群标志物有望诊断早期肝癌
  3. android studio ndk 书籍,NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)
  4. php怎么复制变量,php - 将用户名保留在变量/函数中供以后使用[复制] - SO中文参考 - www.soinside.com...
  5. R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、为指定变量添加单位信息、自定义overall的标签名称
  6. pandas使用extract函数根据正则表达式从dataframe指定数据列的字符串中抽取出数字并生成新的数据列(extract numbers from column)
  7. R语言使用integrate函数进行函数积分计算实战
  8. R语言ggplot2可视化将颜色图例和形状的图例组合成综合图例实战
  9. R语言基于随机森林进行特征选择(feature selection)
  10. R语言因子分析FA(factor analysis)实战案例