多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
整型通过 `Int` 类表示。值得注意的是,Haxe 里的 `Int` 类是扩展自 `Float` 类。 因为所有的整数只不过是浮点数的小数点精确到0位。但是反过来则是错误的,因为转换一个 Float 到 Int 会丢失尾数的精确度。 很多脚本语言,包括 Flash SWF 规范和 JavaScript,允许 `32` 位的整数,可以保存从 `2147483647(2的31次方减1)` 到 `-2147483648(-2的31次方`)的整数。这些整数是有符号的,其中最重要的一个位就是最左侧的,用来决定值究竟是负数还是正数的位。 Neko 中,它的整数只使用 `32` 位值中的 `31` 位,保存的值范围为 `1073741823(2的30次方减1)` 到 `-1073741824(-2的30次方)` 。其原因是为了增加值的访问速度。 通常,脚本语言中的一个类型通常在虚拟机中存储为一个结构,像这样: ~~~ struct value { int value_type; void *value_data; }; ~~~ 这里,`value_type` 用来确定值的类型,所以一个整数应该是 `1` ,而一个浮点数则是 `2` ,字符串则是 `3` 。值对应的真实数据被存储在 `value_data` 位置。当虚拟机需要对 `value_data` 进行处理时,它只要检查 `value_type` 的值来确定 `value_data` 里的内容。 这可以很好的工作,但是问题是这种结构会使速度变慢,因为垃圾回收器必须处理一些复杂的数据类型。就像 `Int` 类型就比其他类型更常用,似乎应该使用一些技巧来保持最快的速度。当一个值结构在 Neko 中被使用,它被一个占用 `32` 位的指针所引用。关于这个指针符号位总是 `0` 。因为 `Int` 也是只有 `32` 位,你可以用完全相同的方式存储两种类型数据,但是要明确它们之间的不同,通过设置最重要的一个位符号位,Int 类型的值,设置为 `1`。这种方式,在维护一个统一类型差异系统时可以保持原生整型的速度。 因 为Neko 使用整型的第 `31` 位作为签名位,你最好提供支持贯穿所有目标平台的一致的限制,以保证每个平台之间的正常转换。因此,当在 Haxe 里使用 `Int`,要确保你使用的值不会超过 `31` 位的限制。如果不确定,使用一个 `Float` 代替吧,它可以包含更大的值。