申请额外的变量
int a = 10;
int b = 20;
int temp; //申请额外的变量temp用于交换两个变量的值
temp = a;
a = b;
b = temp;
使用加减运算
int a = 10;
int b = 20;
a = a + b; //a = 10 + 20 b = 20
b = a - b; //a = 10 + 20 b = 10 + 20 - 20 = 10
a = a - b; //a = 10 + 20 - 10 = 20 b = 10
使用异或运算
int a = 10;
int b = 20;
a = a ^ b; //a = a ^ b b = b
b = a ^ b; //a = a ^ b b = a ^ b ^ b = a
a = a ^ b; //a = a ^ b ^ a = b b = a
上面异或不太清楚的可以参考我的博客异或的性质与应用
num = 11000110
,~num = 00111001
,~num + 1 = 00111010
,num & (~num + 1) = 00000010
,num
中最右边的1保存到了flag中,其他位为0;传统方法
mid = (L + R) / 2;
这种方法应该是我们小学就学过的,用第一个数(也就是最左边的数)加上最后一个数(也就是最右边的数),再用他们的和除以2,所得到的数就是中点。这种方法我们再熟悉不过了,但考虑到计算机存储的限制,如果L和R都是比较大的数,就有可能超出相应数据类型的存储范围,造成溢出。方法二便应运而生。较好的方法
mid = L + (R - L) / 2;
使用这种方法,也能很好的求出中点,而且其中运算得到的数也不会超出数据范围。再优化
众所周知,位运算要快于其他的运算,而除2和乘2都可以看成以为操作,于是最终,求中点的公式为:
mid = L + ((R - L) >> 1);
本人系菜鸟一枚,所写文章皆为学习总结,大佬请轻喷??
谢谢阅读??,欢迎补充!
数据结构与算法学习(番外篇)——算法小技巧(持续更新中...)
原文:https://www.cnblogs.com/staick/p/11815064.html