试图理解这一行代码:
int solution_mask |= 1 << (1+ solution.charAt(i) - 'A');
假设solution.charAt(i)是122.所以122-65 = 57。
1+ 57 = 58
1如何在solution_mask中向左移动58位,即solution_mask变量如何存储值58?
这里是完整的上下文代码:
public static int[][] find(String guess, String soln) {
int[][] res={0,0};
int solution_mask = 0;
for (int i = 0; i < 4; ++i) {
solution_mask |= 1 << (1 + solution.charAt(i) - ‘A’);
}
for (int i = 0; i < 4; ++i) {
if (guess.charAt(i) == solution.charAt(i)) {
res[0]++;
} else if ((solution_mask &
(1 << (1 + guess.charAt(i) - ‘A’))) >= 1) {
res[1]++;
}
}
return res;
}
答案 0 :(得分:1)
答案 1 :(得分:0)
假设代码应该是这样的:
int solution_mask = 0;
...
for ( int i = 0; i < solution.length(); i++ ) {
solution_mask |= 1 << (1+ solution.charAt(i) - 'A');
}
然后,这会在solution_mask
中为solution
字符串中的每个字符设置一位。结果将是一个位模式,指示解决方案中存在哪些字符。
E.G。如果solution
字符串是&#34; ABDF&#34; solution_mask
将是(二进制)1010110
。
如果solution
包含A..Z[\]^_
以外的任何行为者,并且会发生奇怪的事情,因为int
只有32位宽。