Algo
二分查找树
位运算的小技巧
在 移位运算和 异或运算中讨论了这两种位运算。计算机中还有一些其他的位运算,它们比较简单,但也还有一些巧妙的作用,本文将逐一介绍它们。
...移位运算
位运算是直接操作内存中的二进制数据。因此运算效率比常规的四则运算高出不少。
...异或运算
异或运算(exclusive or)又记作XOR,一般用插入符号(caret)^
表示,其可以看到是更加单纯的或运算(|)。我们知道,或运算的规则是:
- a=1,b=1,a|b=1 ①
- a,b任意一个为1,a|b=1 ②
异或运算则是去除了或运算中的规则①,即只有a、b相异时,结果才为真,其他情形都为假。因此异或运算的真值表为:
0^0 = 0
0^1 = 1
1^0 = 1
1^1 = 0
与0异或,其值不变;与1异或,相当于取反。
异或运算有一些特殊的性质,利用这些性质,可以解决特定的问题。这也是本文所要讨论的重点。
...同余定理与二进制补码
我们知道,计算机使用2的补码(Two's complements)来表示负数。这样有一个好处:可以使用同一种运算规则来处理正负数的运算,否则,二进制的正数和负数相加,将会得到错误的结果。为了处理这个讹误,必须为负数设计一套“加法器”。关于这一部分的讨论,参照 关于2的补码。
而补码使正负数使用同一套“加法器/乘法器”规则,实际上利用了同余运算的性质。
...归并排序
插入排序
选择排序
递归问题:走台阶
所有的递归问题,其实都可以用非递归的方式实现。