理解“&”(与)按位运算

Understanding "&" (and) bitwise operation

我正在尝试了解下一个算法中的按位运算。代码本身将数字转换为十六进制表示形式。

您能否解释(为什么n & 15 从字符字符串中生成正确索引位置的逻辑?

对于>>>操作,我的理解是会去掉最右边保留负号的数字,对吗?

static String toHex(int n) {
    final String chars = "0123456789ABCDEF";
    final StringBuilder sb = new StringBuilder();

    while (n != 0) {
        sb.insert(0, chars.charAt(n & 15));
        n >>>= 4;
    }

    return sb.toString();
}

因为 15 = 1111 在二进制中,n 和 15 的结果将在最后 4 个位置具有 n 的位,而其他位置均为 0。所以这是一种更有趣的模运算方式 n % 16.

n >>>= 4会去掉最后4位,将所有剩余位向右移动4位,并在前面添加4个0。所以这只是进行整数除法 n / 16.

的一种奇特方式

对于负数,它实际上与正常的模或除法不同,因为 & 15 总是给出正数,而 >>> = 4 也总是给出一个正数。