分享一个刚刚学到的骚操作与一些基础优化

Posted 我又双叒叕打铁了

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分享一个刚刚学到的骚操作与一些基础优化相关的知识,希望对你有一定的参考价值。

一.手动加栈

  我们有时候会栈溢出,类似于递推的时候,这时候我们就可以用到下面这个操作,来手动加栈。

#pragma comment(linker,"/STACK:1024000000,1024000000")

  原理自行百度,预处理指令详解

 

 

二.寄存器的运用

  其实这个相信大家C时很早就知道了,但是貌似用的人比较少。下面可以给出实际应用实例:

int main()
{
    for (register int i = 1; i < inf; i++) {
        printf("%d",i);
    }
    return 0;
}

  但是,其实C++会自动优化,所以C++没必要用这个操作了。

 

 

三.几个基础的位运算操作

  其实这个几个也很平常,很早就会了,但是还是顺便分享一下吧。

  1.除二乘二的操作

   位运算对变量的 >> 和 << 相当于除以2和乘以2,但是效率会更高一点,不用先转换。

 

  2.判断奇偶性

   对变量用 &1 ,在二进制中奇数的最后一位永远是1,偶数永远是2,而&1的作用就是取变量的二进制数的最后一位。

 

  3.异或交换两个数

   其实异或交换的  效率不如三变量交换,效率不如三变量交换,效率不如三变量交换(说三遍)

   而且在数组操作中,如果是前后交换,奇数的话最后会 自己异或自己,导致结果为 0.

 

 

四.短路运算符 && 和 || 的巧用

  我们知道  当 && 左边的判断为 false 时,就会直接返回 false,不会继续往右判断

        而 || 左边的判断为 true 时,就会直接返回 true ,不会继续往右判断

  这样的话我们就可以用它们来  代替 if 和if-else

  

  A&&B 等同于   if(A) B;

  A&&B || C 等同于  if(A) B else C;

 

 

五.三目运算符和代替 if-else

  其实一直都知道三目预算符,但是没想过效率,平常也就不怎么用

  A?B:C 等同于 等同于  if(A) B else C;

 

六.内联函数

  如果经常调用同一函数,例如swap,不妨设置为内联函数,也就是在函数头加一个 inline

  但是如果被调用函数太过复杂的话,还是不建议用内联函数,例如dfs。

以上是关于分享一个刚刚学到的骚操作与一些基础优化的主要内容,如果未能解决你的问题,请参考以下文章

Guava中这些Map的骚操作,让我的代码量减少了50%

Guava中这些Map的骚操作,让我的代码量减少了50%

阿里问题定位神器 Arthas 的骚操作,定位线上BUG,超给力

阿里问题定位神器 Arthas 的骚操作,定位线上BUG,超给力

StringBuilder 你不知道的骚操作

如何在命令长度受限的情况下成功get到webshell(函数参数受限突破mysql的骚操作)