【发布时间】:2013-08-08 15:31:22
【问题描述】:
我是移位新手,想知道什么时候使用移位?下面的方法将整数转换为二进制、八进制和十六进制,其中“shift”将是 2,3 或 4,而 i 可以是任何整数。
private static String toUnsignedString(int i, int shift) {
char[] buf = new char[32];
int charPos = 32;
int radix = 1 << shift;
int mask = radix - 1;
do {
buf[--charPos] = digits[i & mask];
i >>>= shift;
} while (i != 0);
return new String(buf, charPos, (32 - charPos));
}
在哪里
final static char[] digits = {
'0' , '1' , '2' , '3' , '4' , '5' ,
'6' , '7' , '8' , '9' , 'a' , 'b' ,
'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
'o' , 'p' , 'q' , 'r' , 's' , 't' ,
'u' , 'v' , 'w' , 'x' , 'y' , 'z'
};
我无法理解这种方法。请解释一下。
【问题讨论】:
-
这绝对不能回答你的问题,但这个链接可能对你有用:graphics.stanford.edu/~seander/bithacks.html
-
您是否尝试过单步执行该方法(手动或使用调试器)?你不明白哪一部分?
-
(右移 == 除法,左移 == 乘法)2 ^ 移位的位数。这可能有助于您了解实际情况。
-
@TedHopp 感谢您的评论。我没有得到掩码和位移背后的逻辑
标签: java operators bit-manipulation