C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Снова обработка битов
sav2005
Отправлено: 13.04.2005, 16:12


Ученик-кочегар

Группа: Участник
Сообщений: 3



У меня два вопроса.
Первый — как работать с большими целыми числами (больше чем 2 в 32 минус 1). В справочнике говорится, что такие переменные обьявляются как _int64 (например, как я понял _int64 а), но такие обьявления компилятор не воспринимает.

Второй — у меня есть целое число unsigned long (4 байта). Мне необходима представить это число как 8 векторов по 4 бита каждый и далее работать с этими вектарами. Как это сделать?
vvoid
Отправлено: 13.04.2005, 16:30


Машинист паровоза

Группа: Участник
Сообщений: 171



Чтобы работать с большими числами любой разрядности- нужно писать отдельные библиотеки, что достаточно сложное дело. Поэтому можно использовать уже готовые. Наиболее приемлимый вариант, на мой взгляд, — использование библиотеки OpenSSL (http://www.openssl.org/). Но если тебя полностью устроят 64-разрядные числа, то используй __int64 (тут два знака подчёркивания:-))

По поводу второго вопроса:
чтобы получить из 4-х байтного числа младшие 4 бита используй маску 0x0000000F и дальше в цикле сдвигай исходное число на 4 бита, то есть:
CODE

void VectorFilling (unsigned long SourceDigit32Bit,
std::vector<unsigned long> &Vector)
{
unsigned long TargetDigit4Bit;
unsigned long Smallest4BitMask;

Smallest4BitMask = 0x0000000F;

for (unsigned int Index = 0; Index < sizeof(unsigned long) * 8 / 4; Index++)
{
TargetDigit4Bit = SourceDigit32Bit & Smallest4BitMask;

Vector.push_back(TargetDigit4Bit);

SourceDigit32Bit = SourceDigit32Bit >> 4;
}
}


PS* Код не проверял, но вроде должен работать smile.gif

Отредактировано vvoid — 13/04/2005, 16:55
agisland
  Отправлено: 15.04.2005, 09:36


Ученик-кочегар

Группа: Участник
Сообщений: 14



ты много работаеш с битами! смотри http://agisland.narod.ru

Вернуться в Вопросы программирования в C++Builder