为什么我们需要在java中使用移位运算符?

Sar*_*nan 14 java bit-shift

  1. 使用Shift运算符而不是使用除法和乘法的目的是什么?

  2. 使用移位运营商还有其他好处吗?

  3. 应该在哪里尝试使用移位运算符?

Sea*_*wen 14

除法和乘法是不是真的一个使用位移位运算符.他们是一个过时的"优化",有些人喜欢申请.

它们是位操作,在整数值内的位级工作时是完全必要的.

例如,假设我有两个字节,即两个字节(16位)无符号值的高阶和低阶字节.假设您需要构建该值.在Java中,那是:

int high = ...;
int low = ...;
int twoByteValue = (high << 8) | low;
Run Code Online (Sandbox Code Playgroud)

如果没有班次操作员,你无法做到这一点.

要回答您的问题:您可以在需要使用它们的地方使用它们!而在其他任何地方.

  • 不是在java中.这些天甚至不在C语言中.编译器足够聪明,可以优化代码.最好确保您的代码可读并表达它想要做的事情,而不是试图超越编译器并使其不可读. (8认同)
  • 向左移动比加2便快.但是,您的JIT编译器和您的处理器比您更了解这一点,并且应该自动执行此操作.无论如何,这不是转变的主要用途; 它可以说甚至不是一个好用途. (3认同)

Boh*_*ian 6

当您执行逻辑位操作时使用移位运算符,而不是数学运算.

可以用于速度,在处理2的幂的操作数时明显快于除法/乘法,但代码的清晰度通常优于原始速度.