整数、浮点数与布尔值

整数、浮点数与布尔值

整数字面量

1.可以使用二进制,八进制,十进制,十六进制来表达一个整数字面量.默认为十进制.
二进制:0b 八进制:0o 十六进制:0x,字母必须用小写,不能是大写
2.如果字面量过长,我们可以使用下划线进行分割,也可以在数值前面添加一个或多个零,而不影响其大小

整数类型

1.通过字面量的默认类型就是Int,Int类型表示的整数范围会随不同的处理器与操作系统环境而有所不同;32位:值的范围[-231,231-1],64位:[-263,263-1],当然也可以通过类方法,Int.max,Int.min获取最大值与最小值.
2.Int类型是有符号的,Uint是无符号的
3.固定位宽的类型,Int8,Uint8,Int16,Uint16,Int32,Uint32,Int64,Uint64,用整数字面量为非Int类型的对象初始化,必须进行类型标注.
4.如果整数字面量超出了整形对象所能表示的范围,编译器会报错

扩展(与C语言的交互):size_t(在Swift中被定义为 Int)、ptrdiff_t(在Swift中被定义为 Int)、intptr_t(在Swift中被定义为 Int)、uintptr_t(在Swift中被定义为 UInt)。 size_t 在C语言中用于表示sizeof操作符的返回类型。在Swift中, size_t 是带符号的,而在C语言中则是无符号的。 ptrdiff_t 在ptrdiff_t 在C语言中一般用于两个指针对象做减法后可用于保存其差值的整数类型。 intptr_t 与 uintptr_t 在C语言中均可用于存放某一对象的地址,只不过一个是带符号的,一个是无符号的。

浮点字面量

1.swift支持十进制浮点数,十进制科学计数法,十六进制科学计数法
十进制科学计数法:一个十进制整数或十进制浮点数作为底数,后面跟e或E,再紧跟一个十进制整数作为指数,表示:底数 * 10^指数
十六进制科学计数法:以0x为前缀,后面跟十六进制浮点数,后面再跟p或P,再紧跟一个十进制整数,表示:十六进制浮点数 * 2^指数

//这里类型推导为Double
//相当于250000 2.5 * 10^5
let a = 2.5e5

//相当于0x2.132p0 * 2^3
//注意:p0不可以省略,编译器会报错
//Hexadecimal floating point literal must end with an exponent
let c = 0x2.132p3
//0.0625 0.01171875 0.00048828125
//0x2.132 相当于 2 + 1/16^1 + 3/16^2 + 2/16^3
let d = 0x2.132p0

浮点数类型

1.浮点类型:32位(单精度浮点类型)的Float,64位(双精度浮点类型)的Double.浮点数字面量默认为Doule类型,通过字面量声明Float必须使用类型标注
2.Float32(单精度),Float64(双精度型),Float80(扩展双精度浮点类型,x86,ARM不支持)

布尔类型

Swift原生支持布尔类型(没有C,Objective-C,C++中的非零即真,零即为假,导致布尔类型被整形模糊化了),用Bool表示

//'Int' is not convertible to 'Bool'
if 1 {
    print("true")
}else{
    print("false")
}

2.字面量,关键字true(真),false(假);布尔类型一般用于比较操作表达式,作为条件语句,循环语句的判别,函数返回类型.

数值类型的相互转换

1.整数,浮点数,布尔类型均为结构体类型,使得无法隐式转换,即使是低精度转高精度也不可以;而且swift的结构体不具有继承的特征,只能通过各个类型自身的构造方法做显示转换.
2.高精度转低精度,需要确保高精度的范围在目标精度的范围之内,否则将转换失败,因此转换后的类型一般为可选型,转换失败即为nil
3.swift每种数值类型都提供一个供NSNumber类型作为输入参数的构造方法,用于转换.

整数和浮点数可用的操作符

1.算数操作运算符:加法(+)、减法(-)、乘法()、除法(/)以及取相反数操作(-)和取正数操作符(+)
2.求模运算符(%):只能用于整形,浮点数不能作为求模运算的操作数
3.比较操作符:大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(==)以及不等于(!=),结果为Bool类型
4.按位操作(整数类型):按位与(&),按位或(|),按位异或(^),按位取反(~)
5.移位操作(整数类型):左移(<<),右移(>>),如果右移操作的左操作数是一个带符号整数,那么使用的是扩充符号位的算术右移;如果左操作数是一个无符号整数,那么使用的是高位直接用零填充的逻辑右移。此外,移位操作的右操作数必须是一个非负整数。C语言中关系操作符(即Swift中的比较操作符)的优先级比按位操作符要高,这是因为C语言中没有显式的布尔类型,一个关系操作符的结果也是一个整型值。Swift编程语言中,移位操作符、按位操作符的优先级都比条件操作符要高。
6.布尔类型对象可以使用逻辑操作符:并且(&&)、或者(||)以及非(!)。如果一个逻辑表达式中存在多个逻辑操作符,那么其操作优先级为:! > && > ||。对于并且(&&)操作,如果其左操作数表达式的值为假,那么直接返回结果 false,而不会执行其右操作数的表达式。对于或者(||)操作,如果其左操作表达式的值为真,那么也不会再去计算右操作数表达式,而直接返回 true
7.赋值操作符:赋值操作符(=)以及与赋值操作相关的 +=、-=、
=、/= 等操作符与C语言的返回类型有所不同!C语言中,这些操作符表达式的返回类型为这些操作符的左操作数类型;而在Swift中则是返回 Void 类型
8.圆括号操作符:优先级要大于任一算术逻辑操作符

溢出计算操作

对一个整数做一个算术运算发生了溢出,那么程序会在运行时抛出异常.
不引发异常可以使用溢出操作符:可溢出的加法(&+),可溢出的减法(&-),可溢出的乘法:(&*)
溢出的结果计算方法(同C语言):高位舍去,只保留能容下当前整数对象的地位比特位,然后以补码的形式确定数值

你可能感兴趣的:(整数、浮点数与布尔值)