天天看点

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初始最大值。

方法三:

INFINITY

取中间数

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 算法基础)

继续阅读