我看到了这个方法,它用于更快地读取 Long 的正值。
public static long readLong(InputStream in) throws IOException {
long n = 0;
int c = in.read();
while (c < 48 || c > 57) {
c = in.read();
}
while (c >= 48 && c <= 57) {
n = (n<<3) + (n<<1) + (c-'0');
c = in.read();
}
return n;
}
虽然我理解了所有部分,但我无法得到的是:
按奇数位移位至
建号n = (n<<3) + (n<<1) + (c-'0');
为什么忽略第三位以及它是如何构建它的?
如果你们中有人能用简单的方式解释我,那将会非常有帮助。
谢谢!
最佳答案
n << i
是 n * 2^i
。所以,
(n<<3) + (n<<1) = (n * 2^3) + (n * 2^1) = n * (2^3 + 2^1) = n * 10
基本上,这意味着改变 n
的值向左一位数。
使用 c + '0'
添加它表示将最后一位数字与整数值c
相加。 .
关于java - 这种构建数字的位移是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30758118/