Swift编程语言学习1.4——数值型字面量、数值类型转换
数值型字面量
整数字面量能够被写作:
一个十进制数,没有前缀
一个二进制数,前缀是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——数值型字面量、数值类型转换的更多相关文章
- Swift - 05 - 数值型字面量
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- js 正则学习小记之匹配字符串字面量优化篇
昨天在<js 正则学习小记之匹配字符串字面量>谈到 个字符,除了第一个 个,只有 个转义( 个字符),所以 次,只有 次成功.这 次匹配失败,需要回溯后用 [^"] 才能匹配成功 ...
- Swift编程语言学习9—— 存储属性和计算属性
属性将值跟特定的类.结构或枚举关联.存储属性存储常量或变量作为实例的一部分,计算属性计算(而不是存储)一个值.计算属性能够用于类.结构体和枚举里,存储属性仅仅能用于类和结构体. 存储属性和计算属性通经 ...
- Swift编程语言学习1.3——类型安全和投机型
Swift 是类型安全(type safe )语言.类型安全的语言可以让你清楚地知道代码被处理值类型.假设你需要一个代码String.你绝对不能进去一个不小心传球Int. 因为 Swift 它是类型安 ...
- Swift编程语言学习6—— 闭包
闭包是自包括的函数代码块,能够在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其它一些编程语言中的 lambdas 函数比較类似. 闭 ...
- Swift编程语言学习3.1排列
Swift 语言提供经典的数组和字典两种集合类型来存储集合数据.数组用来按顺序存储同样类型的数据.字典尽管无序存储同样类型数据值可是须要由独有的标识符引用和寻址(就是键值对). Swift 语言里的数 ...
- Swift 编程语言学习0.1——Swift简单介绍
有的时候,认为看英文文档有些费时,看中文文档怕翻译不准,有些地方确实不须要抠字眼.当有些地方假设翻译不精准会产生歧义,所以用这样对比的方式.顺便学习一下Swift. Swift is a new pr ...
- Swift编程语言学习4.3—— 控制语句
控制传递语句(Control Transfer Statements) 控制转移语句改变你代码的运行顺序,通过它你能够实现代码的跳转.Swift有四种控制转移语句. continue break fa ...
- Swift编程语言学习2.1——基础运营商(在)
操作员正在检查,更改.归并值特殊符号或短语.例如,加+这两个数字相加(例如let i = 1 + 2). 算如更复杂的逻辑和操作的实施&&(例如if enteredDoorCode & ...
随机推荐
- 【Eclipse】报错提示删掉@Override
是因为项目的JRE System Library版本不对,点击Edit进入Edit Library 界面,因为项目默认是使用Eclipse自带的jdk版本(Workspace default JRE) ...
- BZOJ 3040: 最短路(road) ( 最短路 )
本来想学一下配对堆的...结果学着学着就偏了... 之前 kpm 写过这道题 , 前面的边不理它都能 AC .. 我也懒得去写前面的加边了... 用 C++ pb_ds 库里的 pairing_hea ...
- listview添加onItemClickListener
MainActivity.java package com.wyl.listview04; import java.util.ArrayList; import java.util.HashMap; ...
- AFNetworking 保存Cookie Session 和 Webview 共享Cookie
1, 请求并携带SessionId, 代码如下: //当请求成共后调用如下代码, 保存Cookie NSArray *cookies = [[NSHTTPCookieStorage sharedHTT ...
- PHPExcel用法
<?php //下面是总结的几个使用方法 include 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; //或者include ...
- CGroup 介绍、应用实例及原理描述
CGroup 介绍 CGroup 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制.记录.隔离进程组 (process groups) 所使用的物力资源 (如 cpu ...
- 浙江工商大学15年校赛E题 无邪的飞行棋 【经典背包】
无邪的飞行棋 Time Limit 1s Memory Limit 64KB Judge Program Standard Ratio(Solve/Submit) 15.38%(4/26) Descr ...
- 2014 HDU多校弟六场J题 【模拟斗地主】
这是一道5Y的题目 有坑的地方我已在代码中注释好了 QAQ Ps:模拟题还是练的太少了,速度不够快诶 //#pragma comment(linker, "/STACK:16777216&q ...
- springmvc中使用response的out.print问题
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws E ...
- 一起学习CMake – 02
本节介绍如何用CMake来设置软件的版本号 在<一起学习CMake - 01>中我们看到了如何用CMakeLists.txt来构建一个最简单的工程,这一节里我们一起来看看如何用CMake对 ...