右移AND赋值运算符逻辑?

时间:2014-03-07 15:41:18

标签: java

答案是14,任何人都可以解释其背后的原因吗?

int n = 7;
n<<=3;
n=n&n+1|n+2^n+3;
n>>=2;
System.out.print(n);

2 个答案:

答案 0 :(得分:4)

让我们一步一步走过

int n = 7; //equals 0111

n<<=3;  //signed left shift 0111 3 spaces which equals 0111000

n=n&n+1|n+2^n+3; // (0111000 and 0111001) or (0111010 xor 0111011)
                 // 0111000 or 0000001
                 // 0111001

n>>=2;  //signed right shift 0111001 2 spaces equals 0001110 which equals 14
System.out.print(n);

如果您不知道,

n<<=3相当于n = n << 3 相近 n += 1相当于n = n + 1

答案 1 :(得分:1)

除了NappaTheSaiyan的答案外,轮班相当于乘法和除以2。

因此左移(即n <= 3)等于乘法,n *(2 ^ 3)或n * 8。

相反,右移(即n>&gt; = 2)相当于除法,n /(2 ^ 2)或n / 4。

这些通常用于代替乘法/除法,因为在处理器周期方面,移位需要较少的处理时间来计算而不是乘法/除法。