Swift数值运算

原创 2015年07月09日 08:48:59

Swift 让所有数值类型都支持了基本的四则运算:

  • 加法(+)
  • 减法(-)
  • 乘法(*)
  • 除法(/)
1 + 2       // 等于 3
5 - 3       // 等于 2
2 * 3       // 等于 6
10.0 / 2.5  // 等于 4.0

与 C 语言和 Objective-C 不同的是,Swift 默认不允许在数值运算中出现溢出情况。但你可以使用 Swift 的溢出运算符来达到你有目的的溢出(如a &+ b)。详情参见溢出运算符

加法运算符也用于String的拼接:

"hello, " + "world"  // 等于 "hello, world"

两个Character值或一个String和一个Character值,相加会生成一个新的String值:

let dog: Character = "d"
let cow: Character = "c"
let dogCow = dog + cow
// 译者注: 原来的引号内是很可爱的小狗和小牛, 但win os下不支持表情字符, 所以改成了普通字符
// dogCow 现在是 "dc"

详情参见字符,字符串的拼接

求余运算

求余运算(a % b)是计算b的多少倍刚刚好可以容入a,返回多出来的那部分(余数)。

注意:
求余运算(%)在其他语言也叫取模运算。然而严格说来,我们看该运算符对负数的操作结果,"求余"比"取模"更合适些。

我们来谈谈取余是怎么回事,计算9 % 4,你先计算出4的多少倍会刚好可以容入9中:

Art/remainderInteger_2x.png

2倍,非常好,那余数是1(用橙色标出)

在 Swift 中这么来表达:

9 % 4    // 等于 1

为了得到a % b的结果,%计算了以下等式,并输出余数作为结果:

a = (b × 倍数) + 余数

倍数取最大值的时候,就会刚好可以容入a中。

94代入等式中,我们得1

9 = (4 × 2) + 1

同样的方法,我来们计算 -9 % 4

-9 % 4   // 等于 -1

-94代入等式,-2是取到的最大整数:

-9 = (4 × -2) + -1

余数是-1

在对负数b求余时,b的符号会被忽略。这意味着 a % b 和 a % -b的结果是相同的。

浮点数求余计算

不同于 C 语言和 Objective-C,Swift 中是可以对浮点数进行求余的。

8 % 2.5 // 等于 0.5

这个例子中,8除于2.5等于30.5,所以结果是一个Double0.5

Art/remainderFloat_2x.png

自增和自增运算

和 C 语言一样,Swift 也提供了方便对变量本身加1或减1的自增(++)和自减(--)的运算符。其操作对象可以是整形和浮点型。 ‌

var i = 0
++i      // 现在 i = 1

每调用一次++ii的值就会加1。实际上,++ii = i + 1的简写,而--ii = i - 1的简写。

++--既是前置又是后置运算。++ii++--ii--都是有效的写法。

我们需要注意的是这些运算符修改了i后有一个返回值。如果你只想修改i的值,那你就可以忽略这个返回值。但如果你想使用返回值,你就需要留意前置和后置操作的返回值是不同的。

  • ++前置的时候,先自増再返回。

  • ++后置的时候,先返回再自增。

例如:

var a = 0
let b = ++a // a 和 b 现在都是 1
let c = a++ // a 现在 2, 但 c 是 a 自增前的值 1

上述例子,let b = ++a先把a加1了再返回a的值。所以ab都是新值1

let c = a++,是先返回了a的值,然后a才加1。所以c得到了a的旧值1,而a加1后变成2。

除非你需要使用i++的特性,不然推荐你使用++i--i,因为先修改后返回这样的行为更符合我们的逻辑。

一元负号

数值的正负号可以使用前缀-(即一元负号)来切换:

let three = 3
let minusThree = -three       // minusThree 等于 -3
let plusThree = -minusThree   // plusThree 等于 3, 或 "负负3"

一元负号(-)写在操作数之前,中间没有空格。

一元正号

一元正号(+)不做任何改变地返回操作数的值。

let minusSix = -6
let alsoMinusSix = +minusSix  // alsoMinusSix 等于 -6

虽然一元+做无用功,但当你在使用一元负号来表达负数时,你可以使用一元正号来表达正数,如此你的代码会具有对称美。

相关文章推荐

Swift快速入门(三)运算符

赋值运算符 、算术运算符、溢出运算符、位运算符、范围运算符、范围运算符、比较运算符、逻辑运算符、nil合并运算符。...

Swift中使用随机数

在Swift中使用随机数 在我们的开发过程中,有时需要产生一些随机数.而Swift中并没有像JAVA中一样提供一个专门的Random类来集中的生成随机数. 在Swift中,提供了几个全局的函数来生...

Swift数字类型之间的转换

Swift数字类型之间的转换Swift是一种安全的语言,对于类型的检查非常严格,不同类型之间不能随便转换。一、整型之间的转换在C和Objective-C等其他语言中,整型之间有两种转换方法:从小范围数...

iOS利用时间戳获得两个字符串时间差,并闪动提示用户剩余时间

最近用到了时间戳,好久没有用过,所以有些生疏了,所以特将代码贴到此处,供遇到类似问题的人借鉴。- (void)ExamPaperDict:(NSDictionary *)examPaperDict{ ...

Xcode自带的查看视图布局的工具

开始试着用reveal,但是reveal需要修改一些东西,并且还收费(通过修改系统时间什么的太麻烦了)。最近了解到Xcode自己就带有查看视图的工具,虽然没有reveal那么强大,但是可以看出控件的摆...

shell基础-bash变量-数值运算与运算符

在Linux的shell中,变量的值的类型默认是字符串,不能直接进行数值运算。[root@localhost ~]# a=9 [root@localhost ~]# b=15 [root@localh...

连载shell(一): 交互式脚本,随日期变化,数值运算

1.交互式脚本:变量内容由用户决定需求: 用户输入first name 与last name ,最后在屏幕显示“Your full name is: ”的内容。debian@debian-p...

关于高性能数值运算

转自林达华的博客 dahuasky.wordpress.com (需翻墙) 经过一个月的繁忙后,在Microsoft Research的工作进入收尾阶段。于是,也有时间上来写点东西了。在微软inte...

实验二 MATLAB的基本数值运算

  • 2015年06月30日 09:20
  • 114KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swift数值运算
举报原因:
原因补充:

(最多只允许输入30个字)