Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29386
  • 博文数量: 49
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 500
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-20 22:39
文章分类

全部博文(49)

文章存档

2014年(49)

我的朋友

分类: iOS平台

2014-06-24 20:05:11


数字

整数数字可以写做:

  • 一个不带前缀的十进制数
  • 一个0b的二进制数
  • 一个带上前缀0o的八进制数
  • 一个带上前缀0x的十六进制数

所有这些整数都是十进制数17:

浮点数可以是十进制的(不带前缀)或者十六进制的(带上前缀0x)。不管怎样,小数点的两端一定要有数字(或是十六进制的数字)。它们也可以带上指数,十进制浮点数可以用大写字母或小写字母e来表示指数,或者用大写字母或小写字母p表示十六进制浮点数的指数。

如果十进制数的指数是exp话,那么基数就是乘以

如果十六进制数的指数是exp的话,那么基数就是乘以

所有这些浮点数都是十进制的12.1875:

数字可以包含额外的格式信息,使它们更加易读。整数和浮点数都可以使用额外的0进行填充,也可以包含下划线来增加可读性。这些格式信息都不会影响数字的真实值的:

数值的类型转换

在代码中,一般用途的整型变量和常量请使用Int类型,即使你已经知道了他们是非负数。在日常情况下使用默认的整数类型,意味着整型常量和变量会立即在代码中彼此之间相互使用(避免了类型转换),并且与整数的类型推断结果是一致的。

仅当手头上的任务有特别需要的时候,才去使用其他的整数类型,比方说处理来自外部的大小固定的数据,或者是出于性能,内存使用,或其他必要的优化等方面的考虑。在这些情况下,准确的声明一下类型可以避免偶然发生的溢出,而且也可以顺便记录一下数据的类型。

整数之间的类型转换

每个数值类型的常量或变量能够存储的整数范围是不同的。一个Int8类型常量或变量能够存储-128到127之间的数字,而一个UInt8型常量或变量能够存储0到255之间的数字。在你的代码被编译时,一个数字如果不符合当前整型常量或变量的范围,就会抛出一个错误:

因为每个数值类型能够存储的范围是不同的,所以你必须在具体分析的基础上进行相应的类型转换。这种方式可以避免隐藏的转换错误,使代码中的类型转换意图更加的明确。

要想把一个特定的数值类型转化为另外一种类型,可以使用现有的值初始化一个新的想要的数值类型。在下面的例子中,常量twoThousandUInt16类型, 而常量oneUInt8类型的。它们不能直接加在一起,因为它们不是相同的类型。而这个例子中调用UInt16(one)函数,使用one作为初始值来创建一个新的UInt16类型,从而代替了原来的值。

由于加法的两边现在都是UInt16类型,所以加法是允许的。结果常量(twoThousandAndOne)被推断为UInt16类型,因为他是两个UInt16值的和。

SomeType(ofIntitialValue)是Swift中调用类型的初始化函数,赋予初始值的默认方式。在底层,UInt16有一个接受UInt8类型值的初始化函数,使用这个初始化函数,用已经存在的UInt8类型值来创建一个新的UInt16类型。在这里你不能随意的传递类型,必须是由UInt16提供了初始化函数的类型。扩展现存的类型好让类型的初始化函数接受新类型(包括你自己定义的类型),将在Extensions(扩展)中详细的介绍。

整数和浮点数之间的类型转换

整型和浮点型之间的转换必须是明确的:

这里,常量three被用来创建一个新的类型值Double(双精度),所以加号两边是都是相同类型的。如果这里没有这个转换,是不允许相加的。

反过来浮点型转换为整型也是一样的,可以使用Double或者Float来初始化一个整型,就像下面这样:

当用这种方法来初始化一个新的整型时,浮点数的小数部分总是被删去的。这表示4.75会变成4,而-3.9变成-3.

注意:

数值型常量和变量相互结合使用的规则不同于数字本身的结合规则。数字3可以直接加到数字0.14159上去,因为数字本身并没有明确的类型。仅在它们被编译器编译时,才会进行类型推断的。

阅读(193) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~