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("Результат: "+Рез);