1.除法(乘法)转位运算
当x的除数(乘数)是2的n次方时,可以转化为x右移(左移)n位
x/pow(2,n)==(x>>n)
或者
x*pow(2,n)==x<<n
因为数据在计算机中通常用2进制表示,位运算通常比乘除效率高的多
2.按位与(&)确定资源
计算机中通常用一段二进制来确定对应的资源或者空间充裕
例如:在段页式存储中如果想确定某一页中某一段的空间是否有位置,一般会储存当前页的二进制“10101011110000110”,其中0表示空闲,1表示当前段已经存储东西
确定第n段是否空闲,即可以用存储的二进制右移n-1位按位与上一个1
if(1&10101011110000110>>(n-1))//大于0
{
//当前位置为1,已经被占用
}
else//为0
{
//当前位置为0,可以储存
}
3.按位或(|)改变资源状态
例如:在段页式存储中如果想确定某一页中某一段的空间是否有位置,一般会储存当前页的二进制“10101011110000110”,其中0表示空闲,1表示当前段已经存储东西
如果已经确定n位置被存储(释放)资源,即可以用存储的二进制按为上一个1(0)左移n-1位
if(1&10101011110000110>>(n-1))//大于0
{
//当前位置为1,已经被占用
//释放n位置资源,即将n位置变为0
0<<(n-1)&10101011110000110
}
else//为0
{
//当前位置为0,可以储存
1<<(n-1)|10101011110000110//储存后将当前位置变为1
}
4.按位与提取整型数字最后面的1
n&(-n)
//因为负数在二进制中通过补码存储,补码是符号位不动,源码按位取反+1(最后的1位置不变)
5.如何去掉整型数字最后面的1
n&(n-1)
//减一改变最后一位1的位置
6.^异或小技巧
a^a=0;
a^0=a;
a^b^c=a^(b^c);
标签:存储,运算,二进制,位置,确定,算法,按位,10101011110000110,大佬 From: https://blog.csdn.net/2301_81831423/article/details/144317353