为什么要用按位运算(<<)对 int 值加倍
Why use bitwise operation (<<) to double int value
想知道为什么 Java 广泛使用 << 1
来使整数值加倍?
例如在 HashMap
中有
// HashMap#resize
newThr = oldThr << 1; // double threshold
我认为 << 1
和 * 2
之间的性能相似?
虽然您可以争辩说二进制移位与使用运算符的算术乘法之间的性能在现代 CPUs 中几乎相同,但在嵌入式 systems.In 中对硬件寄存器进行编程时按位运算是绝对必要的,当您需要以紧凑和快速的方式编码或解码数据时,按位运算会发挥很多作用 way.These 类型的运算通常用于内存或 CPU 功率为 limited.For 的嵌入式系统示例, 要保存 space ,您可以将每个位用作布尔值,将多个变量存储在一个 8 位 int 变量中。在这种情况下,您需要一种方法来快速设置特定位或检索其值。许多嵌入式系统的存储容量为 64、128 或 256 字节(这些是字节,而不是千字节或兆字节)。在此环境中,字节通常用于存储多个数据项、布尔标志或任何其他可以使用位操作设置或读取的内容。
Bit-wise 运算符在视频和音频编解码器中也很常见,原因与嵌入式电子产品使用它们的原因类似;如果你想要一个 super-efficient 视频编解码器,你可以有五个标志和一个半整数的 eleven-bit 计时器。 Bit-wise 运算符现在比以往任何时候都更加强调可读性。
想知道为什么 Java 广泛使用 << 1
来使整数值加倍?
例如在 HashMap
中有
// HashMap#resize
newThr = oldThr << 1; // double threshold
我认为 << 1
和 * 2
之间的性能相似?
虽然您可以争辩说二进制移位与使用运算符的算术乘法之间的性能在现代 CPUs 中几乎相同,但在嵌入式 systems.In 中对硬件寄存器进行编程时按位运算是绝对必要的,当您需要以紧凑和快速的方式编码或解码数据时,按位运算会发挥很多作用 way.These 类型的运算通常用于内存或 CPU 功率为 limited.For 的嵌入式系统示例, 要保存 space ,您可以将每个位用作布尔值,将多个变量存储在一个 8 位 int 变量中。在这种情况下,您需要一种方法来快速设置特定位或检索其值。许多嵌入式系统的存储容量为 64、128 或 256 字节(这些是字节,而不是千字节或兆字节)。在此环境中,字节通常用于存储多个数据项、布尔标志或任何其他可以使用位操作设置或读取的内容。
Bit-wise 运算符在视频和音频编解码器中也很常见,原因与嵌入式电子产品使用它们的原因类似;如果你想要一个 super-efficient 视频编解码器,你可以有五个标志和一个半整数的 eleven-bit 计时器。 Bit-wise 运算符现在比以往任何时候都更加强调可读性。