java - 这种构建数字的位移是如何工作的?

标签 java bit-manipulation

我看到了这个方法,它用于更快地读取 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 << in * 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/

相关文章:

Java:使用 ArrayList 时索引超出范围?

C++ 长方体顶点的点(按位与)

c# - 如何检查是否在 C# 中设置了特定位

c - 交换未知变量类型的每两位

java - 内部连接上的 Hibernate 选择错误

java - 构建我的 Android ReactJs Native 应用程序时遇到问题

javascript - C# 按位异或计算在 R 或 NodeJS 中似乎很容易

php - 按位 7 | ~5 = -1;严重地?

Java jar无法访问资源

java - 如何将字符串日期解析为 MongoDB 日期类型