按位整数运算

这些功能允许将整数作为二进制补码值的位模式进行操作,其中位位置 N 的权重为 2**N

比特从0开始编号。 这些操作就像整数中的符号位无限期地向左扩展一样。 因此,正整数和负整数最重要的位以上的部分分别为0位和1位。

表 1. CLEM 按位整数运算
函数 结果 描述
~~ INT1 整数 生成整数 INT1。 也就是说,对于每一位 INT1 为0。 ~~ INT = –(INT + 1)始终为 true。
INT1 || INT2 整数 运算的结果是按位“或非” INT1INT2。 也就是说,结果中每个比特位置都有一个1,要么 INT1INT2 或两者皆有。
INT1 ||/& INT2 整数 运算的结果是 INT1INT2。 也就是说,结果中每个比特位置都有一个1,要么 INT1INT2 ,但不在两者中。
INT1 && INT2 整数 产生整数的按位“与”运算 INT1INT2。 也就是说,结果中每个比特位置都有一个1,而 INT1INT2
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 中最低有效位集的位位置 NN 是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 为假。