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* Код не проверял, но вроде должен работать
Отредактировано vvoid — 13/04/2005, 16:55
|
|
agisland |
Отправлено: 15.04.2005, 09:36 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 14
|
ты много работаеш с битами! смотри http://agisland.narod.ru |
|