我在Java中找到了这样一行:
result |= (b & 0x1f) << shift;
我已经搜索了运算符的作用,但我仍然无法理解假设result
,b
和shift
是整数值,它应该做什么。 />
谁能告诉我这条线应该做什么?
更新 - 以下是找到的代码的示例部分here
int b, shift = 0, result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
答案 0 :(得分:4)
也许这个解释可能会对你有所帮助:
一个。
的最后5位(b & 0x1f)
:在AND
和b
之间执行逻辑0xf1
操作b
。这意味着:返回A << shift
B中。
shift
:向左移动A
位的结果b
操作。这意味着:将shift
的最后5位向左移动result |= B
位。℃。
result
:将OR
变量分配给执行a的结果result
本身与B
结果之间的逻辑OR
操作 操作。这意味着:在result
和b
的最后5位之间执行逻辑shift
向左移动一定量result
位,然后将结果分配给{{ 1}}变量。
希望这是可以理解的。
答案 1 :(得分:2)
它保留了b的最后5位,左移了一些数量,然后将它们转换成结果。
在这种情况下,它正在逆转此处描述的过程: https://developers.google.com/maps/documentation/utilities/polylinealgorithm