【语法相关】基本位运算

· · 算法·理论

位与(&)

给定两个长度相同的二进制串 A,B(不同则在前面补0),A\&B 的结果的每一位由 AB 的对应位决定,如果 AB 的对应位均为 1,则结果的那一位为 1,否则为 0

位或(|)

**位异或(xor/^)** $A$ ^ $B$ 的结果的每一位同样由 $A$ 与 $B$ 的对应位决定,如果 $A$ 与 $B$ 的对应位不相同,则结果的那一位为 $1$,否则为 $0$。 **左移(<<)** $a<<b,b$ 以十进制表示,表示将 $a$ 的最右边(最低位)加上 $b$ 个 $0$(相当于乘上了 $2^n$)。 **右移(>>)** $a>>b,b$ 以十进制表示,表示将 $a$ 的最右边(最低位)的 $b$ 位删掉(相当于整除 $2^n$)。 $x<<y=x·2^{y} x>>y=\dfrac x{2^{y}} 2^a+1=(1<<a)|1 a\%2=a$ & $1
运算类型 符号表示 速度单位量
逻辑运算 && \|\ ! 1 个单位
位运算 & | ^ <<\ >> 32 个单位
关系运算 ==\ !=\ <\ \le\ >\ \ge 60 个单位
算数运算 1 +\ - 100 个单位
算数运算 2 ×(\ast) 1000 个单位
算数运算 3 ÷(/)\ \% 10000 个单位

lowbit()

lowbit(x)x 的二进制表达式中最低位的 1 所对应的值。

lowbit(0)=0;

常用写法

inline int lowbit(int x){
    return x&(-x);
    //return (x^(x-1))&x;
}
//利用了负整数的补码特性

x&(-x); 通过计算机编码特性(负整数的补码特性)得出;(x^(x-1))&x 通过数学 + 二进制的方式得出。

用法

维护区间

即树状数组。

n-lowbit(n)

**常用写法** `n&(n-1)`