首页 > 编程语言 >那些算法中很重要,却总是被你忽略的小技巧,快来看看你和大佬之间的差距吧(位运算)

那些算法中很重要,却总是被你忽略的小技巧,快来看看你和大佬之间的差距吧(位运算)

时间:2024-12-07 23:03:06浏览次数:5  
标签:存储 运算 二进制 位置 确定 算法 按位 10101011110000110 大佬

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

相关文章

  • 【恐怖の算法】 树形DP
    【恐怖の算法】树型DP引入树形DP,即在树上进行的DP。由于树固有的递归性质,树形DP一般都是递归进行的。基础以下面这道题为例,介绍一下树形DP的一般过程。洛谷P1352没有上司的舞会我们设\(f(i,0/1)\)代表以\(i\)为根的子树的最优解(第二维的值为\(0\)代表\(i\)......
  • 【Baum-Welch 算法】10.35初始状态分布π的拉格朗日函数对其求偏导数并令结果为0
    本文是将博文【Baum-Welch算法】中的公式单独拿出来做一个详细的解析。公式(10.35)(10.35)(10.35)是用于......
  • 【推荐算法】推荐系统中的单目标精排模型
    前言:推荐系统中模型发展较快,初学者【也就是笔者】很难对模型进行一个系统的学习。因此,这篇文章总结了王树森中的视频以及《深度学习推荐系统》中的单目标精排模型,绘制了一个单目标精排模型的思维导图来帮助初学者【笔者】更好的学习。在后面的学习过程中,会加入更多的单目标精排论......
  • 迪克斯特拉算法:单源最短路径问题
    一、迪杰斯特拉算法的介绍迪杰斯特拉(Dijkstra)算法是一种用于计算加权图中单源最短路径的经典算法,由荷兰计算机科学家艾兹赫·迪杰斯特拉(EdsgerDijkstra)于1956年提出。迪杰斯特拉算法的核心思想是通过贪心策略,不断选择当前路径代价最小的节点,并逐步扩展搜索范围,直到找到从源节......
  • 算法刷题打卡DFS深度搜索
    DFS概要:    要想学会深度优先搜索的题目,首先需要知道他的代码原理,适用场景基本原理:    DFS是基于遍历,搜索树,图的算法,通过从根节点(或任意起始节点)开始,沿着每个分支深入访问节点,直到到达叶子节点或没有未访问的邻居节点为止,然后回溯到上一个节点,继续搜索其他......
  • 算法描述:动态规划
    动态规划算法步骤:找出最优解的性质,刻画数据结构递归定义最优值自底向上计算出各子结构的最优值并添入表格中并保存以最优值构造最优解最长公共子序列递归结构:intLCSlength(char*a,char*b,int**len,int**flag)//a,b输入字符串,输出数组len的元素len[i][j]记录len(i,j),//......
  • 算法积累
    计算最大数   对数组进行排序,取最大的n个数和(最大数*(绝对值乘积最大的数)),两者取最大值即为最大数。/***題目:求一个整数数组中的三个数最大乘积*思路:若全是正數,則数组按顺序排序后,最大三个数的乘积即为最大值*若全是负数,同样最大三个数的乘积即......
  • 【推荐算法】推荐系统中的特征工程
    前言:这篇文章是阅读石塔西《互联网大厂推荐算法实战》第二章推荐系统中的特征工程的学习笔记,在未来对于特征向量的学习笔记会在此基础上进行补充。编者认为特征工程已经过时的言论是错误的,该言论认为DNN模型可以自主的完成对数据特征的提取,但是在DeepCrossNetwork网络中,作者直......
  • 欧几里得算法 & 扩展欧几里得算法
    一、欧几里得算法欧几里得算法,也叫辗转相除,简称gcd,用于计算两个整数的最大公约数引理:\(\gcd(a,b)=\gcd(b,a\%b)\)证明:设\(r=a%b\),\(c=gcd(a,b)\)则\(a=xc\),\(b=yc\),其中\(x,y\)互质\(r=a\%b=a-pb=xc-pyc=(x-py)c\)......
  • 堆栈实验--KMP算法
     求next数组的思想:最长公共前后缀什么是字符串前后缀呢,比如一个字符串aba,a可以是前缀,ab也可以是,但aba不是(也有资料说是但在kmp我们不认为),同样的,a(最后的a)是后缀,ba也是。求next数组,以ababa为例,若字符数组以0开始,第一位我们默认为-1,即a b a b a-1求第二位,则......