swift之数值类型杂谈(数值)




import Foundation


//整数,没有小数部分,有正数有负数

/*
Swift 提供了8,16,32和64位的有符号和⽆符号整数类型。这些整数类型和 C 语⾔的命
名⽅式很像,⽐如8位⽆符号整数类型是 UInt8  ,32位有符号整数类型是 Int32  。就像
Swift 的其他类型⼀样,整数类型采⽤⼤写命名法。
*/

var x8 : Int8 = 10
var x16 : Int16 = 10
var x32 : Int32 = 0
var x64 : Int64 = -10
var ux8 : UInt16 = 20
//不再多说


//整数范围
var minInt32 = Int32.min
var maxInt32 = Int32.max
print("int32.min = \(minInt32), int32.max = \(maxInt32)")
//int32.min = -2147483648, int32.max = 2147483647


/*
⼀般来说,不需要专⻔指定整数的⻓度。Swift 提供了⼀个特殊的整数类型 Int  ,⻓度与
当前平台的原⽣字⻓相同:
在32位平台上 Int 和 Int32长度相同
在64位平台上 Int 和 Int64长度相同

UInt 也是一样
在32位平台上 UInt 和 UInt32长度相同
在64位平台上 UInt 和 UInt64长度相同

尽量不要使⽤ UInt  ,除⾮你真的需要存储⼀个和当前平台原⽣字⻓相同的⽆符号整
数。除了这种情况,最好使⽤ Int  ,即使你要存储的值已知是⾮负的。统⼀使
⽤ Int  可以提⾼代码的可复⽤性,避免不同类型数字之间的转换
*/


//浮点数

/*
Double  表⽰64位浮点数。当你需要存储很⼤或者很⾼精度的浮点数时请使⽤此类型。
Float  表⽰32位浮点数。精度要求不⾼的话可以使⽤此类型。

Double  精确度很⾼,⾄少有15位数字,⽽ Float  最少只有6位数字。选择哪个类型取
决于你的代码需要处理的值的范围。


*/




//类型推断

/*
Swift 是⼀个类型安全(type safe)的语⾔。类型安全的语⾔可以让你清楚地知道代码要
处理的值的类型。如果你的代码需要⼀个 String  ,你绝对不可能不⼩⼼传进去⼀个 Int  。
由于 Swift 是类型安全的,所以它会在编译你的代码时进⾏类型检查(type checks),并
把不匹配的类型标记为错误。这可以让你在开发的时候尽早发现并修复错误。
当你要处理不同类型的值时,类型检查可以帮你避免错误。然⽽,这并不是说你每次声明
常量和变量的时候都需要显式指定类型。如果你没有显式指定类型,Swift 会使⽤_类型推
断(type inference)来选择合适的类型。有了类型推断,编译器可以在编译代码的时候
⾃动推断出表达式的类型。原理很简单,只要检查你赋的值即可

*/

let value1 = 15
//value1会被推断为Int

let value2 = 12.88
//value2会被推断为Double
// 当推断浮点数的类型时,Swift 总是会选择 Double  ⽽不是 Float

let value3 = 2 + 11.00
//valuew3 会被推断为Double
//因为:如果表达式中同时出现了整数和浮点数,会被推断为 Double  类型


//数值类型:

/*
⼀个⼗进制数,没有前缀
⼀个⼆进制数,前缀是 0b
⼀个⼋进制数,前缀是 0o
⼀个⼗六进制数,前缀是 0x
*/
let decimalInteger = 17
let binaryInteger = 0b10001 // ⼆进制的17
let octalInteger = 0o21 // ⼋进制的17
let hexadecimalInteger = 0x11 // ⼗六进制的17
print("十进制:\(decimalInteger), 二进制:\(binaryInteger), 八进制:\(octalInteger), 十六进制:\(hexadecimalInteger)")
//十进制:17, 二进制:17, 八进制:17, 十六进制:17


//如果⼀个⼗进制数的指数为 exp  ,那这个数相当于基数和10^exp的乘积:

var testEXP = 3.33e5 // = 333000
var testEXPfu = 3.33e-2
print("\(testEXP) - \(testEXPfu)")
//输出:333000.0 - 0.0333

var testexp2 = 0xAp3 // = 10 * (2 * 2 * 2) = 80
var testexp2fu = 0xap-3
print("\(testexp2) - \(testexp2fu)")
//输出:80.0 - 1.25


//数值类字⾯量可以包括额外的格式来增强可读性。整数和浮点数都可以添加额外的零并且包含下划线,并不会影响字⾯量:

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

//下划线和0不会影响原有值




//数值类型转换

/*
不同整数类型的变量和常量可以存储不同范围的数字。 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  的值来初始化,然后使⽤这个新数字来计算:
*/

var twoThousand: UInt16 = 2_000
var one: UInt8 = 1
var twoThousandAndOne = twoThousand + UInt16(one)


//整数和浮点类型的转换

var valueInt = 12
var valueDouble = 10.11
var valueTotal = Double(valueInt) + valueDouble
print(valueTotal)
//输出:22.11

var valueTotalToInt = Int(valueTotal)
print(valueTotalToInt)
//输出:22
//此时会发生截断


//类型别名
typealias DZL = Int32

var t1 : DZL = 111


//布尔值
//Swift 有两个布尔常量, true  和 false
var boolType : Bool = true












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值