Прочтите это Q / A , чтобы узнать, как обращаться с целыми числами произвольного размера (без знака).
Тем не менее, просто в 2 или 4 раза больше, более вероятно, что будет более простая комбинация. Например, для 128-битного (модульного) сложения Z = X + Y (mod 2^128)
:
lowZ = lowX + lowY (mod 2 ^ 64)
;
lowC = lowZ < lowX ? 1 : 0
(другими словами: если перенос не доступен напрямую, его необходимо рассчитать);
hiZ = hiX + hiY + lowC
(мод 2 ^ 64);
hiC = hiZ < hiX ? 1 : 0
(но обычно перенос просто отбрасывается).
lowX
, lowY
и lowZ
- это всего лишь 64 младших значащих бита значения X
, Y
и Z
. hiX
, hiY
и hiZ
- это всего лишь 64 старших разряда значения X
, Y
и Z
.
.
Вы можете сделать это и для других операций. Такие вещи, как битовые операции, сдвиги и т. Д. Довольно просты. Умножение сложнее, а деление / остаток - сука. Откуда мне знать? Итак, - это пример 32-битных вычислений для Java Card, системы, которая в основном предполагает 16-битные операции . Его было немного сложнее программировать, потому что Java не использует вычисления без знака.
Довольно забавно, сама Java-карта обычно работает на 8-битных процессорах (хотя это быстро меняется). Так что на самом деле происходит двойное преобразование 8 бит в 16 бит и 16 бит в 32 бит. Достаточно уместно, что 8-битная архитектура процессора является прямым предшественником процессоров, используемых в карманных калькуляторах. Этот вид преобразования был известен с рассвета информационных технологий и, вероятно, до этого.