Почему Adobe Flash хранит целые числа с битрейтом на три бита вправо? [Дубликат]

попробуйте следующее:

line = '  24499 ?   00:02:05 sys-yg-ys'
result = False
print("Before test: " + str(result))
result = line.endswith('ys')
print("After test: " + str(result))

вывод:

Before test: False
After test: True

, почему вы хотите добавить параметр «start» и «end»?

9
задан user829876 25 February 2012 в 21:55
поделиться

1 ответ

Что происходит, так это то, что виртуальная машина AS3 использует 32-битные «атомы» для хранения значений примитивных типов.

3 из этих 32 бит используются для описания типа, то есть осталось 29 бит.

Поскольку int является подписанным типом - с использованием 1 бит для знака - это оставляет 28 бит для положительного целого числа. Выполнение наивысшего числа, которое вы можете записать в оставшихся 28 бит:

0x0FFFFFFF = 268435455

Как только целочисленному нужно больше 29 бит, атом изменяется VM на тип Number (который действительно представленный как 29-битный указатель на фактический 64-битный двойной прецизионный float).

Таким образом, значение, определяемое как «максимальное значение int», на самом деле не имеет особого смысла (поскольку Number может хранить интегральные значения до 53 бит, но int ограничит это до 32) - кроме как в терминах:

  • , взаимодействующих с другими языками / технологиями (которые в основном используют 32 бита для их целые числа)
  • , делая результаты (в основном) предсказуемыми для программистов, используемых для 32-битных целых чисел; и
  • будущей проверки (в случае, если внутреннее представление изменится в будущем).

В качестве побочного элемента существует множество особенностей с ints и Numbers - в том числе что это:

var i:Number = 2.0;

... хранится как int до тех пор, пока децималы не понадобятся.

16
ответ дан JimmiTh 27 August 2018 в 09:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: