其他分享
首页 > 其他分享> > 位运算

位运算

作者:互联网

运算符
与 &
或 |
非 ~
异或^
左移(<<)
在二进制表示下把数字同时向左移,低位以0填充,高位越界后舍弃。
1<<n=2n,n<<1=2n
算术右移
在二进制表示下把数字同时向右移,高位以符号位填充,低位越界后舍弃。
算术右移等于除以2向下取整。
逻辑右移
在二进制表示下把数字同时向右移,高位以0位填充,低位越界后舍弃。
C++默认是右移运算是算术右移。
二进制状态压缩
取出整数n在二进制表示下的第k位
(n>>k)&1
取出整数n在二进制表示下的第0~k-1位(后k位)
n&((1<<k)-1)
把整数n在二进制表示下的第k位取反
n^(1<<k)
把整数n在二进制表示下的第k位赋值1
n|(1<<k)
把整数n在二进制表示下的第k位赋值0
n&(~(1<<k))
成对变换
通过计算发现,对于非负整数n
当n为偶数时,n^1等于n+1
当n为奇数时,n^1等于n-1
因此“0与1”,“2与3”,关于xor1运算构成“成对变换”。
这一性质经常用于图论邻接表中边集的存储。在具有无向图(双向边)的图中把一对正反方向的边分别存储在邻接表数组中的第n与第n+1位置(其中n为偶数),就可以通过xor1的运算当前边(x,y)的反向边(y,x)的存储位置。
lowbit运算
lowbit(n)取出非负整数n在二进制表示下最低位的1以及它后边0构成的数值。
lowbit(n)=(n)&(~n+1)=n&(-n)

标签:右移,表示,运算,二进制,lowbit,整数
来源: https://www.cnblogs.com/smghj/p/15954955.html