位运算

含义 C语言
按位与 a&b
按位或 a|b
按位异或 a^b
按位取反 ~a
左移 a<<b
移右 a>>b

按位与(&,and)

and运算通常用于二进制的取位操作,例如一个数and1的结果就是取二进制的最末尾数字,可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数。

相同位的两个数字都为1,则为1;若有一个不为1,则为0。

按位或(|,or)

or运算通常用于二进制特定位上的无条件赋值,例如一个数or1的结果九十八二进制最末位强行变成1.如果需要把二进制最末位编程0,对这个数or1之后再减一即可,其实际意义九十八这个数强行变成最接近的偶数

相同位的两个数字只要一个为1即为1。

按位异或(^,xor)

异或的符号是^。按位异或运算,对等长二进制模式按位或或二进制数的每一位执行逻辑按位异或操作。操作的结果是如果某位不同则该位为1,否则该位为0。
xor运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变。

相同为不同则为1,相同则为0

按位取反(~,not)

not运算的定义是把内存中的0和1全部取反。使用not运算时要格外小心,需要注意整数类型有没有符号。如果not的对象是无符号整数(不能表示负数),那么得到的值就是它与该类型上界的差。

左移(<<,shl)

a shl b就表示把a转为二进制后左移b位(在后面添b个0)。a shl b的值实际上就是a乘以2的b次方

右移(>>,shr)

a shr b表示二进制右移b位(去掉末b位),相当于a除以2的b次方(取整)。
那么400 shr 2=100 。

优先级

order 符号
1 ~
2 <<、>>
3 &
4 ^
5 |
6 &=、^=、|=、<<=、>>=

二叉搜索树

二叉搜索树(Binary Search Tree),它或者是一棵空树,或者具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根节点的值;它的左、右子树也分别为二叉排序树。二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势。