Как сгенерировать число n-бит в длину

Я ищу алгоритм, который позволяет мне генерировать псевдослучайные числа, но .. Как я могу интервал чисел из n-бит? если у вас есть пример для с ++ будет здорово

например:

BigNumber random (биты 256)

Как я могу получить наименьшее и наибольшее количество 256 бит

Спасибо всем, ребята, я нашел решение

если у меня есть n-бит, числа между (2 ^ n) / 2 и (2 ^ n) -1

2

Решение

Если тип случайных чисел intВы могли бы использовать & оператор для маскировки ненужных битов с использованием подходящей битовой маски, например, двоичный 00001111 за первые четыре бита.

2

Другие решения

rand() функция возвращает число от 0 до RAND_MAX, Если n меньше количества бит в RAND_MAX, вы можете использовать это:

rand() % (1<<n)

Однако, если n больше, чем число битов в RAND_MAX, вам нужно сгенерировать несколько случайных чисел и объединить их.

Например, если RAND_MAX равен 32767 (15 бит), и вы хотите 32 случайных бита, вам потребуется следующее:

rand() ^ (rand() << 15) ^ ((rand() & 3)<<30)

Первый rand () возвращает младшие 15 битов, второй биты 15-29 и последние биты 30 и 31.

1

#include <stdlib.h>
int getNBitRandom( unsigned int n ) {
return rand() % ( 1 << n );
}

В общем, вы должны добавить проверку, если n тогда меньше 31,

0

Для случайного числа до размера int, вы можете использовать функцию ниже:

unsigned int GetRandVal(int numOfBits)
{
static int numOfBitsInRandMax = 0;
if (numOfBitsInRandMax == 0)
{
srand((unsigned int)time(NULL));
for (int randMax = RAND_MAX; randMax > 0; randMax >>= 1)
numOfBitsInRandMax++;
}
int quotient  = numOfBits / numOfBitsInRandMax;
int remainder = numOfBits % numOfBitsInRandMax;
unsigned int randVal = 0;
for (int i=0; i<quotient; i++)
randVal = (randVal<<numOfBitsInRandMax)|rand();
return (randVal<<remainder)|(rand()&((1<<remainder)-1));
}

Для большего случайного числа вы можете вызвать эту функцию несколько раз и сохранить каждое из возвращаемых значений в массиве, который будет представлять число. Например, если вы хотите получить 256-битное случайное число:

#define BITS_PER_INT (sizeof(int)*CHAR_BIT)

unsigned int array[256/BITS_PER_INT];
for (int i=0; i<256/BITS_PER_INT; i++)
array[i] = GetRandVal(BITS_PER_INT);
0

Вы можете установить диапазон следующим образом:

int rangeMin = 1,
rangeMax = 100,
generatedNumber;

generatedNumber = rangeMin + rand() % rangeMax;
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector