🌈个人主页:秦jh_-CSDN博客
🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12862161.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12862161&sharerefer=PC&sharesource=qinjh_&sharefrom=from_link
目录
前言
💬 hello! 各位铁子们大家好哇。
今日更新了位运算的相关内容
🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝
基础位运算
位运算符:
- 左移:<<
- 右移:>>
- 按位取反:~
- 按位与:& (有0就是0)
- 按位或:| (有1就是1)
- 按位异或:^ (相同为0,相异为1/无进位相加)
这里规定,二进制数中,第一位是最右边那位。起始下标是0,最后一位是最左边那位,下标是31。这样是为了方便位移操作与下标对应。比如:想把第三位右移到第一位,它的下标是2,此时右移两位即可。
给定一个数n,确定它的二进制表示中的第x位是0还是1
(n>>x)&1
将一个数n的二进制表示的第x位修改成1
n |= (1<<x)
将一个数n的二进制表示的第x位修改成0
n &= (~(1<<x))
提取一个数n二进制表示中最右侧的1
lowbit=n & (-n)
原理:-n要对n取反加1。取反加1后,就将最右侧的1的左边区域全部相反,右边不变。
干掉一个数n二进制表示中最右侧的1
n&(n-1)
原理:(n-1)的含义是,将最右侧的1,右边的区域(包含1)全部变成相反。
异或(^)运算的运算律
- a^0=a
- a^a=0
- a^b^c=a^(b^c)
下图是第三种运算律的简单证明:(无进位相加)