2015-06-09 6 views
0

Это в основном просто проверка на работоспособность.Какое максимальное целое число безопасно использовать в значении флаговой метки Javascript?

says Mozilla, что

Операнды всех битовых операторов преобразуются в подписанных 32-разрядных целых чисел в формате с дополнением до двух.

и

Число -2147483648 и 2147483647 являются минимальными и максимальными целыми числами, представимыми через 32-битное знаковое число.

Поскольку 2147483647 является 0x7FFFFFFF, я считаю, что 0x40000000 (то есть, не 0x80000000) максимальное число можно смело использовать в качестве значения яваскрипта флага. Но я хотел бы убедиться, что я ничего не пропустил или что нет других ошибок. Заранее спасибо!

ответ

1

Диапазон значений - это полное 32-битное значение, т.е. 0 до 0xffffffff (или 2 -1). Если он будет подписан или не зависит от него. Если он будет подписан первоначально, то это приведет к -1:

document.write(0xffffffff>>0);

Но вы можете использовать неподписанные значения, которые тоже означает, что диапазон [0, 4294967295]:

document.write(0xffffffff>>>0);

число 0x40000000 только собирается дать вам half ваш диапазон (в отрицательном диапазоне, в положительном это будет 0x40000000-1, или 0x3fffffff), так что это не безопасный номер для 32-битного диапазона.

Вы безопасный диапазон для знакового числа будете [0x80000000, 0x7fffffff], так что общий сейф рентабельность маски будет 0x7fffffff, однако, вам нужно будет сохранить знак-бит:

number = number < 0 ? number & 0xffffffff : 0x7fffffff; 

И для unsigned ваша маска всегда будет 0xffffffff.

+0

Благодарим вас за ответ! Думаю, я, возможно, ошибся. Я спрашиваю о максимальном значении безопасного флага. Так, например: var FLAG_A = 0x1; var FLAG_B = 0x2; var FLAG_C = 0x4; var FLAG_MAX = 0x .....? Вы говорите, что я могу использовать 0x80000000 в качестве флага? Извините, если я немного замедлился здесь - эти побитовые преобразования всегда причиняют боль моему мозгу. –

+0

@BrianRak да, вы можете использовать это как флаг (самый старший бит), а для подписанных значений у вас есть *, чтобы использовать его, если вы хотите обнаружить отрицательные числа. lol, да, биты похожи на шипы, маленькие, но с потенциальной болью. – K3N