2.3 初识基本数据类型

本节主要向读者介绍整型、浮点型、布尔型数据在Swift语言中的应用。

2.3.1 数学进制与计算机存储原理

所谓进制,是数学计算中人为规定的一套进位规则。生活中,人们习惯使用十进制进行数据计算,例如到文具店买3支铅笔、到菜市场买菜花费5元3角等。在数学与计算机领域除了十进制之外,二进制、八进制、十六进制的应用也十分广泛,进制的实质即是在数据计算时逢几进一(十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位)。

计算机是由逻辑电路组成的,逻辑电路通常只有两个状态,即开关的接通与断开,正好可以表示两种状态(0和1),对计算机而言,采用二进制不仅能够简化运算法则,提高运算效率,更具有很高的抗干扰能力和可靠性,因此二进制也被称为“机器的语言”。

Swift语言支持开发者使用多种进制进行数据的定义与计算,默认为十进制,如果有特殊需求,可以通过在数据前面加前缀的方式实现,示例如下:

    var type_10 = 17;  //十进制的17
    var type_2 = 0b10001 //二进制的17
    var type_8 = 0o21  //八进制的17
    var type_16 = 0x11 //十六进制的17

在进一步了解了数据类型的相关知识外,读者首先应该清楚几个概念。计算机内存中最小的数据运算单元是一个二进制位(bit),其只有两种状态:0或者1。字节(B)是最小的数据单元,1个字节由8个二进制运算位组成。针对无符号数来说,1个字节最大可以表示的数为二进制11111111,即十进制数255。读者如果有一些编程经验,一定会对ASCII码十分熟悉,ASCII码的存储空间即1个字节的大小,因此其最多可以表示256个字符。在字节之上,还有千字节(KB)、兆字节(MB)、吉字节(GB)、太字节(TB)等,它们之间的换算关系如下:


1B=8bit

1KB=2^10B

1MB=2^10KB

1GB=2^10MB

1TB=2^10GB

1PB=2^10TB

2.3.2 整型数据

Swift语言中的整型数据分为有符号整型数据与无符号整型数据。所谓有符号与无符号,通俗的理解即为分正负号与不分正负号。

对于无符号整型,Swift中提供了5种类型。其中,4种存储空间的数据类型,分别对应占用8位、16位、32位、64位而进行运算位的存储空间。使用Xcode开发工具创建一个新的Playground,命名为BasicDataType,编写如下演示代码:

    //8位无符号整型数的最大值 255
    var a1 = UInt8.max
    //16位无符号整型数的最大值 65535
    var a2 = UInt16.max
    //32位无符号整型数的最大值 4294967295
    var a3 = UInt32.max
    //64位无符号整型数的最大值 18446744073709551615
    var a4 = UInt64.max

上面代码中创建了4个变量a1、a2、a3、a4。在Swift语言中,整型数据类型实际上是采用结构体的方式实现的,其中max属性可以获取到当前类型的最大值。读者可能会有疑问,在实际开发中,到底应该选择哪一种类型来表达无符号整型呢?上面有提到,Swift语言中的无符号整型实际有5种,还有1种为UInt类型,这种类型编译器会自动适配,在64位的机器上为UInt64,在32位的机器上为UInt32,示例代码如下:

    //获取数据类型所占位数 在64位机器上UInt占8字节64位
    var a5 = MemoryLayout<UInt>.size

MemoryLayout是Swift标准库中定义的一个枚举,顾名思义就是用于获取内存相关信息。MemoryLayout<UInt>是一种泛型的用法,调用其size属性可以获取某种数据类型所占内存空间的字节数。

有符号整型数据与无符号整型数据十分类似,只是其首位二进制位为符号位,不纳入数值计算,示例代码如下:

与max属性对应,min属性用于获取整型数据的最小值。

2.3.3 浮点型数据

浮点型数据用来表示一些小数。浮点型数据分为单精度浮点型与双精度浮点型,分别用Float与Double表示,示例代码如下:

    var b = MemoryLayout<Float>.size    //4个字节
    var b1 = MemoryLayout<Float32>.size //4个字节
    var b2 = MemoryLayout<Float64>.size //8个字节
    var b3 = MemoryLayout<Float80>.size //16个字节
    var c = MemoryLayout<Double>.size  //8个字节

Swift语言中也支持使用科学计数法来表示数字,在十进制中使用e来表示10的n次方,在十六进制中使用p来表示2的n次方,示例代码如下:

    var sum = 1.25e3 //1.25*(10^3) = 1250
    var sun2 = 0x1p3 //1*(2^3) = 8

Swift语言中还有一个十分有意思的特性,无论是整型数据还是浮点型数据,都可以在数字前加任意个0来进行位数填充,也可以在数字中加入下划线进行分隔,进而增加可读性,这些操作并不会影响原始数值,却提高了对开发者的编程友好性,使代码的结构更加清爽,示例如下:

2.3.4 布尔型数据

布尔类型很多时候也叫作逻辑类型,熟悉Objective-C编程语言的读者可能会了解,在Objective-C语言中,BOOL类型其实并非严格意义上的逻辑布尔类型,Objective-C中可以使用0与非零来表达逻辑假与逻辑真。而在Swift语言中则不同,Swift语言的Bool类型十分严格,只有true和false两种值,分别表示真和假。同样,在Swift语言的条件语句以及需要进行逻辑判断的语句中,所使用的条件表达式的值也必须为Bool类型。

创建真与假的布尔值示例代码如下:

    var bool1 = true   //创建布尔真变量
    var bool2 = false  //创建布尔假变量