2024 年日本 PHP 研討會

預定義常數

以下常數由此擴充功能定義,並且只有在擴充功能已編譯到 PHP 中或在執行時動態載入時才會可用。

GMP_ROUND_ZERO (整數)
GMP_ROUND_PLUSINF (整數)
GMP_ROUND_MINUSINF (整數)
GMP_MSW_FIRST (整數 (int))
GMP_LSW_FIRST (整數 (int))
GMP_LITTLE_ENDIAN (整數 (int))
GMP_BIG_ENDIAN (整數 (int))
GMP_NATIVE_ENDIAN (整數 (int))
GMP_VERSION (字串 (string))
GMP 函式庫版本
GMP_MPIR_VERSION (字串 (string))
MPIR 函式庫版本。
新增筆記

使用者貢獻的筆記 2 則筆記

2
i at tiankonguse dot com
11 年前
當我使用 var_dump 這些常數時,這些值是
GMP_ROUND_ZERO 0
GMP_ROUND_PLUSINF 1
GMP_ROUND_MINUSINF 2
GMP_VERSION "5.0.2"
-2
AnonyMouse At Do Not Mail Me Dot Com
4 年前
以下表格顯示在一個小端序 64 位元平台上,使用 gmp_init( 0x0123456789ABCDEF ) 和各種輸入參數呼叫 gmp_export 的輸出結果。
注意:表格中的底線用於說明「字」(字元、短整數、整數或長整數) 之間的區隔。

+-----------+-----+--------+-------------------------+
| 字大小 | 符號 | 端序 | gmp_export 十六進位結果 |
+-----------+-----+--------+-------------------------+
| 1 位元組 | MSW | 小端序 | 01_23_45_67_89_AB_CD_EF |
+-----------+-----+--------+-------------------------+
| 1 位元組 | MSW | 大端序 | 01_23_45_67_89_AB_CD_EF |
+-----------+-----+--------+-------------------------+
| 1 位元組 | LSW | 小端序 | EF_CD_AB_89_67_45_23_01 |
+-----------+-----+--------+-------------------------+
| 1 位元組 | LSW | 大端序 | EF_CD_AB_89_67_45_23_01 |
+-----------+-----+--------+-------------------------+
| 2 位元組 | MSW | 小端序 | 2301_6745_AB89_EFCD |
+-----------+-----+--------+-------------------------+
| 2 位元組 | MSW | 大端序 | 0123_4567_89AB_CDEF |
+-----------+-----+--------+-------------------------+
| 2 位元組 | LSW | 小端序 | EFCD_AB89_6745_2301 |
+-----------+-----+--------+-------------------------+
| 2 位元組 | LSW | 大端序 | CDEF_89AB_4567_0123 |
+-----------+-----+--------+-------------------------+
| 4 位元組 | MSW | 小端序 | 67452301_EFCDAB89 |
+-----------+-----+--------+-------------------------+
| 4 位元組 | MSW | 大端序 | 01234567_89ABCDEF |
+-----------+-----+--------+-------------------------+
| 4 位元組 | LSW | 小端序 | EFCDAB89_67452301 |
+-----------+-----+--------+-------------------------+
| 4 位元組 | LSW | 大端序 | 89ABCDEF_01234567 |
+-----------+-----+--------+-------------------------+
| 8 位元組 | MSW | 小端序 | EFCDAB8967452301 |
+-----------+-----+--------+-------------------------+
| 8 位元組 | MSW | 大端序 | 0123456789ABCDEF |
+-----------+-----+--------+-------------------------+
| 8 位元組 | LSW | 小端序 | EFCDAB8967452301 |
+-----------+-----+--------+-------------------------+
| 8 位元組 | LSW | 大端序 | 0123456789ABCDEF |
+-----------+-----+--------+-------------------------+
完整表格請見 https://pastebin.com/2GX4L3dq

我的結論和推論
* gmp_export 似乎會去除符號資料,就像呼叫 gmp_abs( $gmp_resource ) 一樣
* MSW 可能代表最高有效字 (順序),因為最高有效 (最高位數) 的字會先出現。
- 「字」(word) 是一種數值類型 (char、short、int 或 long),由 $word_size 參數決定。
* LSW 可能代表「最低有效字」(Least Significant Word)(順序),因為最低有效(最低位數)的字會優先排列。
* 位元組順序(endianness) 僅在您使用大於 1 的字大小(word size)時才重要,因為當字大小為 1 時,每個位元組都會被複製。當字大小為 2 時,每個 short 都會被複製。4 代表 int。複製大於一個位元組的數字時,位元組順序很重要,因為它會改變單元大小內位元組的順序。一個 2 位元組的 short 的位元組會根據位元組順序交換,但每個位元組中的位元將保持不變。

此註釋太長無法發佈,因此我不得不將用於製作上述表格的程式碼移至 https://pastebin.com/gWLU4GF8
To Top