gpt4 book ai didi

actionscript-3 - 在ActionScript 3中,为什么大int值的动态类型为Number?

转载 作者:行者123 更新时间:2023-12-04 03:12:50 26 4
gpt4 key购买 nike

我注意到,如果我创建一个具有大值的int,则该对象的动态类型似乎是Number。

例子:

var int1:int = 0x8000000;
var type1:String = flash.utils.getQualifiedClassName(int1); // Returns "int"

var int2:int = 0x10000000;
var type2:String = flash.utils.getQualifiedClassName(int2); // Returns "Number"

这里发生了什么?这两个值都远低于 maximum value of an int(即2,147,483,647(2 ^ 31-1))。

最佳答案

这是因为AS3虚拟机使用32位“原子”来存储基本类型的值。

这32位中的3位用于描述类型,这意味着还剩下29位。

由于int是带符号的类型-使用1位作为符号-留下28位为正整数。在剩下的28位中可以写出最高的数字:

0x0FFFFFFF = 268435455

一旦整数需要超过29位,VM便将原子更改为 Number类型(实际上表示为指向实际64位 double 浮点数的29位指针)。

因此,定义为“int的最大值”的值实际上并没有多大意义(因为 Number可以存储最多53位的整数,但是 int会将其限制为32位)-除了以下方面:
  • 与其他语言/技术(大多数情况下使用32位整数)进行通信
  • 使结果(大多数情况下)对于习惯32位整数的程序员而言是可预测的;和
  • 面向 future 的证明(以防内部表示将来发生变化)。

  • 附带说明一下,int和Numbers有很多特性-包括以下几点:
    var i:Number = 2.0;

    ...以int形式存储,直到实际需要小数为止。

    关于actionscript-3 - 在ActionScript 3中,为什么大int值的动态类型为Number?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9447517/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com