数值型字面量

整数字面量能够被写作:

一个十进制数,没有前缀

一个二进制数,前缀是0b

一个八进制数,前缀是0o

一个十六进制数,前缀是0x

以下的全部整数字面量的十进制值都是17:

let decimalInteger = 17
let binaryInteger = 0b10001 // 二进制的17
let octalInteger = 0o21 // 八进制的17
let hexadecimalInteger = 0x11 // 十六进制的17

浮点字面量能够是十进制(没有前缀)或者是十六进制(前缀是0x)。小数点两边必须有至少一个十进制数字(或者是十六进制的数字)。

浮点字面量另一个可选的指数(exponent),在十进制浮点数中通过大写或者小写的e来指定,在十六进制浮点数中通过大写或者小写的p来指定。

假设一个十进制数的指数为exp,那这个数相当于基数和10exp的乘积:

1.25e2 表示 1.25×102,等于 125.0。

1.25e-2 表示 1.25×10−2,等于 0.0125。

假设一个十六进制数的指数为exp。那这个数相当于基数和2exp的乘积:

0xFp2 表示 15×22,等于 60.0。

0xFp-2 表示 15×2−2。等于 3.75。

以下的这些浮点字面量都等于十进制的12.1875:

let decimalDouble = 12.1875
let exponentDouble = 1.21875e1
let hexadecimalDouble = 0xC.3p0

数值类字面量能够包括额外的格式来增强可读性。整数和浮点数都能够加入额外的零而且包括下划线,并不会影响字面量:

let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion =1_000_000.000_000_1

数值型类型转换

通常来讲。即使代码中的整数常量和变量已知非负。也请使用Int类型。

总是使用默认的整数类型能够保证你的整数常量和变量能够直接被复用而且能够匹配整数类字面量的类型猜測。

仅仅有在必要的时候才使用其它整数类型。比方要处理外部的长度明白的数据或者为了优化性能、内存占用等等。使用显式指定长度的类型能够及时发现值溢出而且能够暗示正在处理特殊数据。

整数转换  

不同整数类型的变量和常量能够存储不同范围的数字。Int8类型的常量或者变量能够存储的数字范围是-128~127,而UInt8类型的常量或者变量能存储的数字范围是0~255。

假设数字超出了常量或者变量可存储的范围,编译的时候会报错:

let cannotBeNegative: UInt8 = -1
// UInt8 类型不能存储负数。所以会报错
let tooBig: Int8 = Int8.max + 1
// Int8 类型不能存储超过最大值的数,所以会报错

因为每中整数类型都能够存储不同范围的值,所以你必须依据不同情况选择性使用数值型类型转换。这样的选择性使用的方式,能够预防隐式转换的错误并让你的代码中的类型转换意图变得清晰。

要将一种数字类型转换成还有一种,你要用当前值来初始化一个期望类型的新数字。这个数字的类型就是你的目标类型。在以下的样例中,常量twoThousand是UInt16类型,然而常量one是Uint8类型。它们不能直接相加。由于它们类型不同。

所以要调用UInt16(one)来创建一个新的UInt16数字并用one的值来初始化,然后使用这个新数字来计算:

let twoThousand: UInt16 = 2_000

let one: UInt8 = 1
let twoThousandAndOne = twoThousand +UInt16(one)

如今两个数字的类型都是UInt16,能够进行相加。目标常量twoThousandAndOne的类型被猜測为UInt16,由于它是两个UInt16值的和。

SomeType(ofInitialValue)是调用 Swift 构造器并传入一个初始值的默认方法。在语言内部,UInt16有一个构造器,能够接受一个UInt8类型的值,所以这个构造器能够用现有的UInt8来创建一个新的UInt16。注意,你并不能传入随意类型的值,仅仅能传入UInt16内部有相应构造器的值。

只是你能够扩展现有的类型来让它能够接收其它类型的值(包含自己定义类型)。请參考扩展。

整数和浮点数转换

整数和浮点数的转换必须显式指定类型:

<pre name="code" class="java">let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) +pointOneFourOneFiveNine
// pi 等于 3.14159,所以被猜測为Double 类型

这个样例中,常量three的值被用来创建一个Double类型的值,所以加号两边的数类型同样。假设不进行转换,两者无法相加。

浮点数到整数的反向转换相同行,整数类型能够用Double或者Float类型来初始化:

let integerPi = Int(pi)
// integerPi 等于 3,所以被猜測为 Int 类型

当用这样的方式来初始化一个新的整数值时。浮点值会被截断。

也就是说4.75会变成4,-3.9会变成-3。

注意:

结合数字类常量和变量不同于结合数字类字面量。

字面量3能够直接和字面量0.14159相加,由于数字字面量本身没有明白的类型。它们的类型仅仅在编译器须要求值的时候被猜測。

Swift编程语言学习1.4——数值型字面量、数值类型转换的更多相关文章

  1. Swift - 05 - 数值型字面量

    //: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...

  2. js 正则学习小记之匹配字符串字面量优化篇

    昨天在<js 正则学习小记之匹配字符串字面量>谈到 个字符,除了第一个 个,只有 个转义( 个字符),所以 次,只有 次成功.这 次匹配失败,需要回溯后用 [^"] 才能匹配成功 ...

  3. Swift编程语言学习9—— 存储属性和计算属性

    属性将值跟特定的类.结构或枚举关联.存储属性存储常量或变量作为实例的一部分,计算属性计算(而不是存储)一个值.计算属性能够用于类.结构体和枚举里,存储属性仅仅能用于类和结构体. 存储属性和计算属性通经 ...

  4. Swift编程语言学习1.3——类型安全和投机型

    Swift 是类型安全(type safe )语言.类型安全的语言可以让你清楚地知道代码被处理值类型.假设你需要一个代码String.你绝对不能进去一个不小心传球Int. 因为 Swift 它是类型安 ...

  5. Swift编程语言学习6—— 闭包

    闭包是自包括的函数代码块,能够在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其它一些编程语言中的 lambdas 函数比較类似.   闭 ...

  6. Swift编程语言学习3.1排列

    Swift 语言提供经典的数组和字典两种集合类型来存储集合数据.数组用来按顺序存储同样类型的数据.字典尽管无序存储同样类型数据值可是须要由独有的标识符引用和寻址(就是键值对). Swift 语言里的数 ...

  7. Swift 编程语言学习0.1——Swift简单介绍

    有的时候,认为看英文文档有些费时,看中文文档怕翻译不准,有些地方确实不须要抠字眼.当有些地方假设翻译不精准会产生歧义,所以用这样对比的方式.顺便学习一下Swift. Swift is a new pr ...

  8. Swift编程语言学习4.3—— 控制语句

    控制传递语句(Control Transfer Statements) 控制转移语句改变你代码的运行顺序,通过它你能够实现代码的跳转.Swift有四种控制转移语句. continue break fa ...

  9. Swift编程语言学习2.1——基础运营商(在)

    操作员正在检查,更改.归并值特殊符号或短语.例如,加+这两个数字相加(例如let i = 1 + 2). 算如更复杂的逻辑和操作的实施&&(例如if enteredDoorCode & ...

随机推荐

  1. load、save方法、spark sql的几种数据源

    load.save方法的用法          DataFrame usersDF = sqlContext.read().load("hdfs://spark1:9000/users.pa ...

  2. java字符串输出

    package mytest; public class Mycode { public static void main(String[] args){ String[]seasons = {&qu ...

  3. BZOJ 3384: [Usaco2004 Nov]Apple Catching 接苹果( dp )

    dp dp( x , k ) = max( dp( x - 1 , k - 1 ) + *** , dp( x - 1 , k ) + *** ) *** = 0 or 1 ,根据情况 (BZOJ 1 ...

  4. Activity中Menu相关的几个方法的调用时机

    用于创建菜单的常用的方法有如下两种: 1.onCreateOptionsMenu(Menu menu) 2.onPrepareOptionsMenu(Menu menu) MyDiaryActivit ...

  5. ZOJ 3778 Talented Chef 模拟 [ 祝愿明天省赛一帆风顺, ZJSU_Bloom WILL WIN : )

    这题的意思是给你 n 道菜,第 i 道菜需要 Ai 步才能完成 每次你能对 m 道菜分别完成一步,请问最少需要几次? 这题暴力写肯定是不行的,去年省赛的时候就是没写出来这题,今天再把思路理一理吧. 首 ...

  6. C# 7.0

    C# 7.0 本文参考Roslyn项目中的Issue:#118. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性 ...

  7. Linux远程桌面工具 -- NoMachine

    玩Linux系统,会经常用到远程桌面软件. 我一直用的2个是Xmanager 和 VNC. 今天看到一个新软件: NoMachine. NoMachine NX 是一个快速的终端服务器和虚拟桌面软件, ...

  8. c# winform 弹出确认消息框判断是否删除?

    if (MessageBox.Show("确认删除?", "此删除不可恢复", MessageBoxButtons.YesNo) == DialogResult ...

  9. jsp生命周期和工作原理

    jsp的工作原理jsp是一种Servlet,但是与HttpServlet的工作方式不太一样.httpservlet是先由源代码编译为class文件后部署到服务器下的,先编译后部署.而jsp则是先部署后 ...

  10. Mac中QT程序发布

    基于Qt开发的应用程序进驻Mac App Store 最近摸索着将一个基于用Qt开发的App发布到Mac App Store,在网上查找相关资料的时候,发现很多文档都过期了,要有一些修改,所以想记录下 ...