上海网站建设 网络推广,wordpress 联系人表单,小程序备案流程,哪个购物平台质量好价格合适位运算
位运算是直接对二进制的每一位进行逻辑操作的运算方式
用途#xff1a;位运算一般用于考察异或的性质、状态压缩、与位运算相关的特殊数据结构、构造题等。
基本的位运算共 6 种#xff0c;分别为按位与、按位或、按位异或、按位取反、左移和右移。
按位与 …位运算
位运算是直接对二进制的每一位进行逻辑操作的运算方式
用途位运算一般用于考察异或的性质、状态压缩、与位运算相关的特殊数据结构、构造题等。
基本的位运算共 6 种分别为按位与、按位或、按位异或、按位取反、左移和右移。
按位与
两个数字与运算的结果不会变小
按位或 |
两个数字或运算的结果不会变小
异或 ^
两个数字进行异或运算结果可能变大也可能变小也可能不变。
异或的性质
// 交换律
x ^ y y ^ x
// 结合律
x ^ (y ^ z) (x ^ y) ^ z
// 自反性
x ^ x 0
// 零元素
x ^ 0 x
// 逆运算
如果x ^ y z,则有 z ^ y x (两边同时异或 y)按位取反
常用于无符号数避免符号位取反造成干扰
位运算技巧
判断数字奇偶性
表达式x1
如果结果位1说明是奇数结果为0说明是偶数
获取二进制的某一位
表达式x i 1
结果必然为 0 或 1,表示x中第 i 位的值
修改二进制某一位
修改二进制某一位为1
表达式x | (1 i)
将x的第i位或上1则x第i位变为1其他位不受影响
修改二进制某一位为0
表达式x ~(1 i)
其中~是按位非
判断一个数是否是2的幂次
表达式x (x - 1)
如果是2的幂次方则其二进制中只有一个 1 x - 1就会有很多连续的1并且与x的1没有交集两者与运算一定为0其他情况必然不为 0 .
获取二进制中最低位的1
表达式 lowbit(x) x -x
如果x010010则lowbit(x) 000010
常用于数据结构树状数组