按位整数运算
这些功能允许将整数作为二进制补码值的位模式进行操作,其中位位置 N 的权重为 2**N。
比特从0开始编号。 这些操作就像整数中的符号位无限期地向左扩展一样。 因此,正整数和负整数最重要的位以上的部分分别为0位和1位。
| 函数 | 结果 | 描述 |
|---|---|---|
~~ INT1 |
整数 | 生成整数 INT1。 也就是说,对于每一位 INT1 为0。 ~~ INT =
–(INT + 1)始终为 true。 |
INT1 || INT2 |
整数 | 运算的结果是按位“或非” INT1 和 INT2。 也就是说,结果中每个比特位置都有一个1,要么 INT1 或 INT2 或两者皆有。 |
INT1 ||/& INT2 |
整数 | 运算的结果是 INT1 和 INT2。 也就是说,结果中每个比特位置都有一个1,要么 INT1 或 INT2 ,但不在两者中。 |
INT1 && INT2 |
整数 | 产生整数的按位“与”运算 INT1 和 INT2。 也就是说,结果中每个比特位置都有一个1,而 INT1 和 INT2。 |
INT1 &&~~ INT2 |
整数 | 产生按位“与” INT1 和位补码 INT2。 也就是说,结果中每个比特位置都有一个1,而 INT1 ,而0在 INT2。 它与 INT1 && (~~INT2) 相同,可用于清除 INT1 中设置的 INT2。 |
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 为负数,则表示为 0 比特。 由于符号扩展,非负整数中有无限多个0位,负整数中有无限多个1位。 情况总是这样, integer_bitcount(INT) = integer_bitcount(-(INT+1))。 |
integer_leastbit(INT) |
整数 | 返回整数 INT 中最低有效位集的位位置 N。 N 是2的幂次, INT 恰好能被2整除。 |
integer_length(INT) |
整数 | 以二进制补码整数的形式返回 INT 的长度(以位为单位)。 也就是说, N 是满足 INT < (1 << N) if INT >= 0 INT >= (–1 <<
N) if INT < 0 的最小整数。 如果 INT 非负,则 INT 作为无符号整数的表示需要至少 N 位的字段。 或者,无论INT的符号如何,将其表示为有符号整数至少需要 N+1 位来表示带符号的整数,无论其符号如何。 |
testbit(INT, N) |
布尔值 | 测试整数 INT 中位置 N 的位,并以布尔值的形式返回位 N 的状态,1 为真,0 为假。 |