
在c里面 x*=a+b运算是怎么算的啊?还有x&x-1 x=x&(x-1)
展开全部
根据运算符的优先级,*= 属于赋值运算符,优先级比 + 低
所以 x*=a+b 相当于 x*=(a+b) ;
*= 运算符懂吧,a*=b 相当于 a = (a*b);
按位与运算符“&”的优先级低于减法运算法,所以 x&x-1和x&(x-1)是一样的;
& 运算是按位与,将 x 和 x-1 都转化为二进制形式,一位一位的进行与运算,
1&1 = 1; 1&0 = 0; 0&1 = 0; 0&0 = 0;
例如x = 45;
101101 x
101100 x-1
& -----------------------
101100 x&(x-1)
x=x&(x-1) 就是将x&(x-1)的结果在赋值给x(x原来的值被覆盖掉了).
另外,你有没有发现,x为奇数时,x&(x-1) = x-1
x为偶数时,x&(x-1) = x-2
所以 x*=a+b 相当于 x*=(a+b) ;
*= 运算符懂吧,a*=b 相当于 a = (a*b);
按位与运算符“&”的优先级低于减法运算法,所以 x&x-1和x&(x-1)是一样的;
& 运算是按位与,将 x 和 x-1 都转化为二进制形式,一位一位的进行与运算,
1&1 = 1; 1&0 = 0; 0&1 = 0; 0&0 = 0;
例如x = 45;
101101 x
101100 x-1
& -----------------------
101100 x&(x-1)
x=x&(x-1) 就是将x&(x-1)的结果在赋值给x(x原来的值被覆盖掉了).
另外,你有没有发现,x为奇数时,x&(x-1) = x-1
x为偶数时,x&(x-1) = x-2
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询