что делает этот код JavaScript? - PullRequest
0 голосов
/ 29 апреля 2010

Нашел этот код в нашей кодовой базе на днях. Не уверен, для чего это используется. Есть догадки?

function checkIntegerRange(x) {
  return ((x >= 0) && (x < 2020202020)) || (x == 2147483647) || (x == 4294967295);
}

Ответы [ 5 ]

6 голосов
/ 29 апреля 2010

2147483647 - это наибольшее значение, которое может храниться в типичном 32-битном целочисленном типе со знаком. 4294967295 - аналогичное значение для 32-разрядного целого типа без знака. Возможно, какая-то другая часть вашего кода использует их как специальные значения маркера.

Я понятия не имею, что может означать 2020202020, хотя он выглядит как произвольно выбранная верхняя граница чего-то.

4 голосов
/ 30 апреля 2010

2020202020 - это преобразование "" (5 пробелов) в шестнадцатеричную строку. Автор (вероятно, один склонный к написанию запутанного кода :), возможно, хотел убедиться, что строка, состоящая минимум из 5 символов, преобразованных в шестнадцатеричное, не считается целым числом.

Вот пример конвертера http://www.string -functions.com / string-hex.aspx

2 голосов
/ 29 апреля 2010

Что он делает подтверждает, что x находится в диапазоне 0..2020202020 или x == 2 ^ 31-1 (2147483647, максимальное положительное значение в 32-разрядном целом числе со знаком) или x == 2 ^ 32-1 (4294967295; который будет равен -1 в дополнительном 32-разрядном целочисленном знаке со знаком двоичного числа или максимальном значении, которое может хранится в 32-разрядном целом числе без знака ).

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

1 голос
/ 29 апреля 2010

возвращает логическое значение (true, false), если отправленное ему число находится в диапазоне от 0 (включительно) до 2020202020 (не включительно) или если число равно 2147483647 или если оно равно 4294967295.

Что касается цели ... это вам решать;)

0 голосов
/ 29 апреля 2010

похоже на фильтрацию / пометку:

2147483647:  Hex 7FFFFFFF or bin 1111111111111111111111111111111
4294967295  Hex: FFFFFFFF or bin 11111111111111111111111111111111

Кстати: 2 * 2147483647 = 4294967295-1

Я бы сказал, что он должен проверять между определенным диапазоном или некоторыми забавными флагами

...