String convertByteToBase4(byte x) {
String result = “";
for (int i=0; i<4; i++) {
result = "0123".charAt(x & 3) + result;
x = (byte)(x>>2)
}
return result;
}
我搞不懂&3在这段代码中的作用是什么,它是不是应该在字节x上加上3的缩写?
发布于 2021-02-09 12:03:31
您将转换为基数4,这意味着每个数字有两位。
3是二进制11,即两位。
&3是按位and,它有效地隔离了最右边的两位,或最右边的基数4位。
这与将数字2位向右移位的>>2相结合。
整个循环:获取最右边的两位,移位两位,获取下两位,移位,等等。
发布于 2021-02-09 12:04:19
"0123".charAt(x & 3)
charAt
返回给定索引处的给定字符串的字符。在本例中,字符串为"0123"
,索引由x & 3
确定。
3
是二进制形式的0000 0011
。2位二进制数范围[0, 3]
、00
、01
、10
和11
。
x & 3
屏蔽了x
中的高位
x7 x6 x5 x4 x3 x2 x1 x0
& 0 0 0 0 0 0 1 1
-------------------------
x1 x0
所以你可以简单地把x & 3
想象成x % 4
。毫无疑问,按位运算比算术运算快得多。
https://stackoverflow.com/questions/66112746
复制相似问题