CutBitsMask

From SunFlurry wiki
Jump to: navigation, search
  CutBitsMask (Функции работы с числами)
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Аргумент не число, неверный диапазон
Визуальность:Нет

Функция получает результат выражения pow(2,<Количество бит в маске>)-1, который является битовой маской для использования с операцией And для сохранения только <Количество бит в маске> бит в числе. Аргумент может принимать значения от 1 до 64 включительно. Вычисление степени не производится, функция использует внутреннюю таблицу для получения результата.

Синтаксис

CutBitsMask(<Количество бит в маске (INT)>):<Маска (INT)>

Аргументы

  • <Количество бит в маске (INT)> - Число, показатель вычисляемой степени числа 2.

Возвращаемое значение

Результат функции всегда будет целым числом. В следующей таблице приведены все возможные значения функции в зависимости от аргумента.

Значение аргумента Результат
1 1
2 3
3 7
4 15
5 31
6 63
7 127
8 255
9 511
10 1023
11 2047
12 4095
13 8191
14 16383
15 32767
16 65535
17 131071
18 262143
19 524287
20 1048575
21 2097151
22 4194303
23 8388607
24 16777215
25 33554431
26 67108863
27 134217727
28 268435455
29 536870911
30 1073741823
31 2147483647
32 4294967295
33 8589934591
34 17179869183
35 34359738367
36 68719476735
37 137438953471
38 274877906943
39 549755813887
40 1099511627775
41 2199023255551
42 4398046511103
43 8796093022207
44 17592186044415
45 35184372088831
46 70368744177663
47 140737488355327
48 281474976710655
49 562949953421311
50 1125899906842623
51 2251799813685247
52 4503599627370495
53 9007199254740991
54 18014398509481983
55 36028797018963967
56 72057594037927935
57 144115188075855871
58 288230376151711743
59 576460752303423487
60 1152921504606846975
61 2305843009213693951
62 4611686018427387903
63 9223372036854775807
64 -1


Примеры

//Параметры вычисления CRC с любым основанием с параметрами, типа значение инициализации и пр., используемыми вне функции. См. описании функции CalculateHash:
//Основание CRC
Бит:=8;
//Полином CRC (16-ричная нотация)
Поли:="7";
//Данные для вычисления CRC
Данные:="1234567890";
//Инициализация вычисления CRC (начальное значение)
Инит:=CutBitsMask(Бит);
//В конце вычисления будет выполнена операция XOR с данным числом
Конец:=CutBitsMask(Бит);

//Создаем промежуточный результат из пустой строки. В буфере, представляющем результат по смещению 2048, хранится промежуточное значение вычисления, 
//  которое было инициализировано числом -1, мы можем заменить его на требуемое.
buf:=CalculateHash("","CRC"+Бит,0,,Поли);
buf.SetQWord(2048,Инит);
//После этого промежуточный результат можно использовать для вычисления реальных данных:
Рез:=CalculateHash(Данные,"CRC"+Бит,1,buf);
//Выполняем последнюю операцию XOR на результате
Рез:=DecToBase(BaseToDec(Рез,16) Xor ((Конец Xor CutBitsMask(Бит))And(CutBitsMask(Бит))),-16);
//Будет выведен результат: "57"
Message("Результат: "+Рез);