Я пытаюсь реализовать простую, умеренно эффективную библиотеку bignum на C. Я хотел бы хранить цифры, используя полный размер регистра системы, на которой он скомпилирован (предположительно, 32 или 64-битные целые числа). Насколько я понимаю, я могу сделать это, используя intptr_t. Это правильно? Есть ли более семантически подходящий тип, то есть что-то вроде intword_t?
Я также знаю, что с помощью GCC я могу легко обнаружить переполнение на 32-битной машине, преобразовав оба аргумента в 64-битные целые числа, которые будут занимать два регистра и использовать такие инструкции, как IA31 ADC (добавить с переносом). Могу ли я сделать что-то подобное на 64-битной машине? Есть ли 128-битный тип, который я могу использовать для компиляции, чтобы использовать эти инструкции, если они доступны? Еще лучше, есть ли стандартный тип, который представляет удвоенный размер регистра (например, intdoubleptr_t), чтобы это можно было сделать независимым от машины способом?
Спасибо!
size_t
лучше, чемintptr_t
, или используйте типы[u]int[_fast]N_t
. 10.01.2010