徐水政府网络互动平台长春网络推广优化
一、左移:用来将一个数的各二进制位全部左移n位,低位以0补充,高位越界后舍弃。
n左移1位,n<<1,相当于2*n
1左移n位,1<<n,相当于2^n
二、右移:将一个数的各二进制位右移N位,移到右端的低位被舍弃,高位以符号位填充
n右移1位,n>>1,相当于|n/2|
x右移n位,x>>n,相当于|x/n|
三、常用操作
(n >> k) & 1,求n二进制下的第k位是0还是1,是1结果为真,是0结果为假。因为1的二进制数中只有第0位数是1,其余位数都是0。
n^=1,即n=n^1,能让n变成与原来相反的数(0或1)
n | (1 << k),能把n的第k位变成1
x=x&(x-1):用于消去x的最后一位
四、二进制状态压缩
二进制状态压缩是指讲一个长度为m的bool数组用一个m位二进制整数表示并存储的方法。利用下列位运算操作可以实现bool数组对应下标元素的存取。
取出整数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 )