Как я моделирую поразрядное вращение 64-разрядного (неподписанного) целого числа в JavaScript?

tf diff /shelveset:shelveset /format:unified

Редактирование: Это пишет в стандартный вывод. Можно передать вывод по каналу в файл.

Для большего количества опций, см. Команда .

Различия

7
задан Jeff 20 November 2009 в 02:48
поделиться

4 ответа

Храните 64-битный номер как отдельные разделы с высоким и низким уровнем. Чтобы повернуть влево на N при N <32:

hi_rot = ((hi << N) | (lo >>> (32-N))) & (0xFFFFFFFF)

lo_rot = ((lo << N) | (hi >>> (32-N))) & (0xFFFFFFFF)

Если N> = 32, вычтите 32 из N, поменяйте местами hi и lo, а затем выполните указанные выше действия.

12
ответ дан 6 December 2019 в 11:49
поделиться

Я думаю, что единственный способ сделать это - создать класс int64, который внутри содержит два 32-битных целых числа и выполняет сдвиг путем переноса между ними.

0
ответ дан 6 December 2019 в 11:49
поделиться

Вот вращение на основе значений.

double d = 12345678901.0;
// get high int bits in hi, and the low in
int hi = (int)(d / 16.0 / 16.0 / 16.0 / 16.0);
int low = (int)d;

int rot = 3; // thus * 8
int newhi = (low >> (32 - rot)) | (hi << rot);
int newlow = (hi >> (32 - rot)) | (low << rot);

double newdouble = ((double)hi * 16.0 * 16.0 * 16.0 * 16.0) + (double)low;
0
ответ дан 6 December 2019 в 11:49
поделиться

Я считаю, что это, хотя и не самый эффективный способ, преобразовать число в строку в двоичной форме (64-битной), использовать подстроку для перемещения символа в начале и добавления его к end (для вращения влево) и преобразовать двоичную форму обратно в число. Я уверен, что вы сможете понять, как преобразовать десятичное число в его двоичную форму в строку и обратно.

4
ответ дан 6 December 2019 в 11:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: