Contributed by <JimmyChongz
>
n / d
會向下取整數。例如 10 / 3 = 3
INTMAX
延伸問題
mpi
<inttypes.h>
:提供固定寬度的整數型別(如 uint32_t)和格式化宏,確保跨平台一致性。<stdint.h>
:定義標準整數型別(如 uint32_t、size_t),用於精確控制記憶體大小。unit32_t *data
:無號整數陣列,用於儲存多精度整數的數字。size_t capacity
:表示 data
陣列的容量,用於追蹤分配的記憶體大小。mpi_t
被定義為 mpi_t[1]
而不是 mpi_t
或 *mpi_t
?
mpi_t
在使用時表現得像一個型別,但保留結構內部動態記憶體管理的靈活性。
mpi_t x;
時,x
是一個單元素陣列,內含結構實體,無需手動分配結構本身的記憶體。func(x)
時,陣列退化為指向結構的指標,效率高(只傳遞一個指標大小的數據)。x->data
的動態記憶體,結構本身的生命周期由 C 自動處理(Stack 分配)。x->data
直接訪問,無需額外的 &
或 *
。mp_bitcnt_t
:表示多精度整數的位元計數(bit count)mpi_enlarge
:擴大 rop
的 data
陣列容量到指定的 capacity
(如果新容量大於當前容量)。
realloc
重新分配 rop->data
到新空間(capacity
* 4,因為每個 uint32_t
佔 4 字節)。rop->data == NULL
且 capacity != 0
),報錯記憶體不足並終止程式。mpi_compact
:去除 rop->data
高位的零元素,壓縮 rop
的 data
陣列容量。
(rop->capacity - 1)
開始檢查 rop->data[i]
,若 rop->data[i]
為零,則壓縮容量 capacity
,直到找到第一個非零元素為止。realloc
將 rop->data
調整到新容量(capacity
* 4)。rop->capacity
為新容量。rop->data == NULL
且 capacity != 0
),報錯記憶體不足並終止程式。