Difference between revisions of "CutBitsMask"
(→Примеры) |
m (1 revision imported) |
(No difference)
|
Latest revision as of 07:43, 7 February 2021
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("Результат: "+Рез);