-
if(b&1)
&(按位与)就是对两个操作数的二进制形式的每一位进行逻辑与操作,有0则为0。例如1&0=0; 1&1=1;而偶数最后一位为0,奇数最后一位为1。因此b&1就是判断b是否为偶数,!b&1就可以用来判断奇数。偶数的话结果为0,奇数的话结果为1。
-
x&(-x)
-
x>>1
>>(右移运算符),移位运算符左边是要移位的数值,右边是移位的位数,右移是按照指定的位数将一个数的二进制向右移位,右移后,移出的低位舍弃,如果是无符号位,则高位补0,如果是有符号数,则高位补充符号位或者0。
eg:char型变量的值是-8,它的二进制补码为1111000,所以a>>2需要将右边两个0移出,由于最左边为符号位1,所以左边补两个1,结果为11111110,对其再求补码得到-2。"左移乘法,右移除法"
因此x>>1可以用来表示x/=2;
-
0x3f3f3f3f无穷大常量的设置
-
upper_bound和lower_bound区别
他们的头文件为<algorithm>
lower_bound返回的是大于或等于val的第一个元素位置,而upper_bound返回的是大于val的第一个元素位置。
因为使用的是二分法,所以时间复杂度为O(logn)。
注意返回的是地址!!若要用数组下标记得最后减去数组首地址。
-
关于memset
可以用0,-1,127(最大值)来初始化,不能用1。