在整数之间使用按位与运算符的好处?
Benefit of using bitwise AND operator between integers?
我正在查看一些代码,如下所示:
public int someMethod(String path, int maxCallers) {
int hash = path.hashCode();
int caller = (hash & Integer.MAX_VALUE) % maxCallers;
return caller;
}
此方法returns根据路径调用哪个调用者。如果 maxCallers
值为 4,则调用者值应介于 0-3 之间。现在我不明白做 hash & Integer.MAX_VALUE
的用途。我能想到的一个原因是程序员想要一个正数,因为哈希码可以是负数,但我认为我的理解是错误的。有人可以在这里解释一下按位 AND 运算符的用法吗?
你的假设是正确的。这是为了在散列为负数的情况下删除整数的符号。 AND
ing 与 Integer.MAX_VALUE
将从整数中删除符号位。注意这与获取整数的绝对值不同:
int hash = -1;
int caller = (hash & Integer.MAX_VALUE) % 4; // returns 3
int hash = -1;
int caller = Math.abs(hash) % 4; // returns 1
我正在查看一些代码,如下所示:
public int someMethod(String path, int maxCallers) {
int hash = path.hashCode();
int caller = (hash & Integer.MAX_VALUE) % maxCallers;
return caller;
}
此方法returns根据路径调用哪个调用者。如果 maxCallers
值为 4,则调用者值应介于 0-3 之间。现在我不明白做 hash & Integer.MAX_VALUE
的用途。我能想到的一个原因是程序员想要一个正数,因为哈希码可以是负数,但我认为我的理解是错误的。有人可以在这里解释一下按位 AND 运算符的用法吗?
你的假设是正确的。这是为了在散列为负数的情况下删除整数的符号。 AND
ing 与 Integer.MAX_VALUE
将从整数中删除符号位。注意这与获取整数的绝对值不同:
int hash = -1;
int caller = (hash & Integer.MAX_VALUE) % 4; // returns 3
int hash = -1;
int caller = Math.abs(hash) % 4; // returns 1