位元整數作業
這些函數可以按代表二進制補碼值的位元型樣(其中位元位置 N 的加權為 2**N)來操作整數。位元從 0 開始往上編號。這些作業就好像是把整數的符號位元向左無限延伸。因此,在最高有效位元上的所有地方,正整數有 0 位元,負整數有 1 位元。
| 函數 | 結果 | 說明 |
|---|---|---|
~~ INT1 |
整數 | 產生整數 INT1 的位元補碼。即,INT1 的對應位元為 0 的結果均為 1。~~ INT = -(INT + 1) 始終成立。 |
INT1 || INT2 |
整數 | 此作業的結果是 INT1 與 INT2 的位元 "inclusive or"。即,INT1 和 INT2 其中一個的對應位元上是 1 或兩者的對應位元上同時是 1 時「或」後的結果為 1。 |
INT1 ||/& INT2 |
整數 | 此作業的結果是 INT1 與 INT2 的位元 "exclusive or"。即,INT1 和 INT2 其中一個的對應位元是 1 但非同時為 1 時「異或」後的結果為 1。 |
INT1 && INT2 |
整數 | 產生整數 INT1 和 INT2 的位元 "and"。即,結果中的每個位元位置僅當 INT1 和 INT2 中的對應位元位置均為 1 時才為 1。 |
INT1 &&~~ INT2 |
整數 | 將對 INT1 和 INT2 位元求補後的結果進行位元 "and" 運算。即,INT1 的對應位元是 1 且 INT2 的對應位元是 0 時進行這一運算後的結果才為 1。此運算與 INT1 && (~~INT2) 運算的結果相同,可用於清除在 INT2 中設定的 INT1 的位元。 |
INT << N |
整數 | 產生 INT1 向左偏移 N 個位置的位元型樣。如果 N 為負值,那麼向右移。 |
INT >> N |
整數 | 產生 INT1 向右偏移 N 個位置的位元型樣。如果 N 為負值,那麼向左移。 |
INT1 &&=_0 INT2 |
布林 | 相當於布林表示式 INT1 && INT2 /== 0,但效率更高。 |
INT1 &&/=_0 INT2 |
布林 | 相當於布林表示式 INT1 && INT2 == 0,但效率更高。 |
integer_bitcount(INT) |
整數 | 計算 INT 的二補數代表中 1 位元或 0 位元的號碼。如果 INT 為非負數,那麼 N 為 1 位元的號碼。如果 INT 為負數,那麼 N 為 0 位元數目。由於符號延伸的原因,非負整數中將有無數個 0 位元,而負整數中將有無數個 1 位元。對於此運算,始終有 integer_bitcount(INT) = integer_bitcount(-(INT+1)) 成立。 |
integer_leastbit(INT) |
整數 | 傳回整數 INT 中最低有效位元組的位元元置 N。N 是保證可以對 INT 進行整除的條件下,2 的最高冪次。 |
integer_length(INT) |
整數 | 以二補整數形式傳回 INT 的長度(以位元計)。即,N 是使
INT < (1 << N) if INT >= 0 INT >= (-1 << N) if INT <0
成立的最小整數。如果 INT 非負,那麼將 INT 代表為無符號整數需要一個長度至少為
N 位元的欄位。另外,最少需要用 N+1 個數位來代表有符號整數 INT(不論符號是正是負)。 |
testbit(INT, N) |
布林 | 測試整數 INT 中位置 N 處的位元,並以布林形式傳回第 N 位元的狀態(true 表示 1,false 表示 0)。 |