关闭

Swift数值运算

标签: swift
603人阅读 评论(0) 收藏 举报
分类:

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

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:84329次
    • 积分:2051
    • 等级:
    • 排名:第19379名
    • 原创:121篇
    • 转载:23篇
    • 译文:1篇
    • 评论:14条
    最新评论