答案是14,任何人都可以解释其背后的原因吗?
int n = 7;
n<<=3;
n=n&n+1|n+2^n+3;
n>>=2;
System.out.print(n);
答案 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。
这些通常用于代替乘法/除法,因为在处理器周期方面,移位需要较少的处理时间来计算而不是乘法/除法。