C++ 编程小技巧

定义常量并赋一个很大的值
方法一:

int minArea = 1 << 30;

minArea = 1073741824,<<表示将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
例:a = a << 2 将a的二进制位左移2位,右补0,左移1位后a = a * 2; 若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。1<<30 表示1左移30位,每左移一位乘以2,所以就是1*2^30=1073741824。

方法二:
unsigned int x = 0,则 x-1 等于unsigned int类型的最大值。根据不同编译器的unsigned int大小不同得出的结果不同,VC6.0的结果为4294967295即2^32-1。该技巧常用语为unsigned int初始最大值。

取中间数

int middle = ((end - start) >> 1) + start;
//>>运算规则:按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补符号位,
//即正数补零,负数补1.


除以2

n >> 1


判断是否为奇数

if ((n & 0x1) == 1)


用合理的编码表示“状态”,减小存储代价
参考:
一、用二进制依次加1的进位方法模拟实现 http://blog.csdn.net/happyygdx/article/details/78831000
二、8.2.1 广搜与八数码问题(Coursera 程序设计与算法 专项课程4 算法基础)

猜你喜欢

转载自blog.csdn.net/happyygdx/article/details/79221386