[技巧]不使用算术运算符让一个数加一(用位运算)

代码如下:

 

int add(int n)
{
// 这里假设n>=0,不过对于n<0的情况也是成立的
	int c=1;
	int d;
	while(c!=0)
	{
		d=n&c;
		n=n^c;
		c=d<<1;
	}
	
	return n;
}

 原理就是:

对于一个二进制编码的数字,想要加一可以这样做:从最低位开始向最高位寻找第一个位为0的位,将这个位置1,而后边的位全部置0。