Swift数值运算
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
中:
2倍。很好,那余数是1(用橙色标出)
在 Swift 中这么来表达:
9 % 4 // 等于 1
为了得到a % b
的结果,%
计算了下面等式。并输出余数
作为结果:
a = (b × 倍数) + 余数
当倍数
取最大值的时候。就会刚好能够容入a
中。
把9
和4
代入等式中,我们得1
:
9 = (4 × 2) + 1
相同的方法。我来们计算 -9 % 4
:
-9 % 4 // 等于 -1
把-9
和4
代入等式。-2
是取到的最大整数:
-9 = (4 × -2) + -1
余数是-1
。
在对负数b
求余时,b
的符号会被忽略。
这意味着 a % b
和 a % -b
的结果是同样的。
浮点数求余计算
不同于 C 语言和 Objective-C,Swift 中是能够对浮点数进行求余的。
8 % 2.5 // 等于 0.5
这个样例中,8
除于2.5
等于3
余0.5
。所以结果是一个Double
值0.5
。
自增和自增运算
和 C 语言一样。Swift 也提供了方便对变量本身加1或减1的自增(++
)和自减(--
)的运算符。
其操作对象能够是整形和浮点型。
var i = 0
++i // 如今 i = 1
每调用一次++i
。i
的值就会加1。
实际上。++i
是i = i + 1
的简写。而--i
是i = i - 1
的简写。
++
和--
既是前置又是后置运算。
++i
。i++
。--i
和i--
都是有效的写法。
我们须要注意的是这些运算符改动了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
的值。
所以a
和b
都是新值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数值运算的更多相关文章
- shell简单用法笔记(shell中数值运算)二
shell中变量值,如果不手动指定类型,默认都是字符串类型: 例如: a= b= c=$a+#b echo $c 结果会输出:123+456 shell中,如果要进行数值运算,可以通过一下方法: 方法 ...
- 在shell script中进行数值运算的两种方法
方法1:使用"$((计算式))"的方式进行数值运算,不需要使用declare命令显示声明数值型变量来存储计算结果: 方法2:使用declare命令配合"-i"选 ...
- shell之数值运算
Shell中声明变量默认是字符串, 要参与数值运算,可使用下面方式,简单,表示以数值方式.
- linux中的数值运算
一.declare 作用:声明变量类型,bash默认变量为字符串类型的,并且字符串在拼接时直接拼接,不需要加号 使用方法: 二.数值运算 加法运算 a= b= c=$(($a+$b)) echo $c
- 数值运算内建函数(core python programming 2nd edition 5.6.2)
数值运算内建函数 函数 功能 abs(num) 返回 num 的绝对值 coerce(num1, num2) 将num1和num2转换为同一类型,然后以一个元组的形式返回. divmod(num1, ...
- shell脚本基础 数值运算 判断 及if语句
数值运算 整数运算[三种,随便掌握一种即可]expr 数字 运算符 数字 [root@ceshiji ~]# expr 1 + 1(运算符号都是+ - * / 注:*需要\*.%是取余,余数只有0 1 ...
- C# 2进制、8进制、10进制、16进制...各种进制间的转换(三) 数值运算和位运算
一.数值运算 各进制的数值计算很简单,把各进制数转换成 十进制数进行计算,然后再转换成原类型即可. 举例 :二进制之间的加法 /// <summary> /// 二进制之间的加法 /// ...
- [Shell]Bash变量:数值运算及运算符
------------------------------------------------------------------------------------------------- Sh ...
- shell 数值运算
declare数值运算 linux默认变量类型为字符串 declare [+/-] [选项] 变量名 '-' 给变量设定类型属性 '+' 取消变量的类型属性 '-a' 将变量声明为数组型 '-i' 将 ...
随机推荐
- TinyXml 操作XML 常用操作
源代码下载:http://sourceforge.net/projects/tinyxml/files/ 如下是一个XML片段: <Persons> <Perso ...
- Centos 5.6安装Mysql(步骤,疑问)
1.安装步骤 yum install mysql yum install mysql-server yum install mysql-devel chgrp -R mysql /var/lib/my ...
- 在FPGA中使用for循环一定浪费资源吗?
渐渐地,发现自己已经习惯于发现细节,喜欢打破常规,真的非常喜欢这种feel. 相信很多人在书上或者博文上都有提出“在FPGA中使用for语句是很占用资源的”的观点,特权同学也不例外.那么,这种观点正确 ...
- Oracle“不等于号”与Null的情况
今天突然才发现,Oracle中的“不等于操作符”是忽略Null的. 比如,查询comm不等于的300的记录,我会理所当然地使用where comm != 300 预想会返回包含Null的不等于300的 ...
- js 学习的地址;
1.https://github.com/windiest/Front-end-tutorial 2.http://www.w3school.com.cn/tags/html_ref_eve ...
- Oracle数据库字符集问题解析
Oracle数据库字符集问题解析 经常看到一些朋友问ORACLE字符集方面的问题,我想以迭代的方式来介绍一下.第一次迭代:掌握字符集方面的基本概念.有些朋友可能会认为这是多此一举,但实际上正是由于对相 ...
- 【转】批量删除redis中的key
1. DEL 直接加键名称 DEL key1 key2 key3 127.0.0.1:6379> DEL site_msg_99973 false site_msg_99974 fals ...
- Android的Message机制(简单小结)
对于Android的Message机制主要涉及到三个主要的类,分别是Handler.Message.Looper:首先对每个类做一个简单介绍:然后再介绍所谓的Android的Message机制是如何实 ...
- pyv8使用总结
在使用python爬虫的过程中,难免遇到要加载原网站的js脚本并执行.但是python本身无法解析js脚本. 不过python这么猛的语言,当然设置了很多方法来执行js脚本.其中一个比较简单的方法是使 ...
- [转]Hash碰撞冲突解决方法总结
我们知道,对象Hash的前提是实现equals()和hashCode()两个方法,那么HashCode()的作用就是保证对象返回唯一hash值,但当两个对象计算值一样时,这就发生了碰撞冲突.如下将介绍 ...