ank*_*hoi 2 java bitwise-operators
byte b = 5;
int n = 33;
b<<n
b>>n
Run Code Online (Sandbox Code Playgroud)
我知道如何计算:如果这是左移,那么我们需要将数字乘以 2 的 n 次方,对于右移,我们必须将数字除以 2 的 n 次方。
如果n是小数我可以计算。有人可以解释一下如果 n 很大(比如这里是 33)如何手动计算它,或者还有其他方法吗?
如果您的右操作数大于 31,那么您可以使用 along代替int。其值介于 -2^63 和 2^63 - 1 之间。
请注意>>,它并不会按照您直觉认为的那样进行操作。它带有符号位!
例如,在一个短片中,内容如下:
1000 0101
Run Code Online (Sandbox Code Playgroud)
右移 3 将给出完全违反直觉的结果:
1111 0001
Run Code Online (Sandbox Code Playgroud)
代替:
0001 0001
Run Code Online (Sandbox Code Playgroud)
如果您想要“真正的”右移,请>>>改为使用。
如果它比这个更大,你必须使用BigInteger:
final BigInteger b1 = new BigInteger("5");
Run Code Online (Sandbox Code Playgroud)
BigIntegerhas.shiftLeft()和.shiftRight()方法(相当于 Java 的<<and >>>——注意>整数基元类型上的三元组)。请注意,这些操作将返回一个新的 BigInteger!所以,不要这样做:
b1.shiftLeft(33);
Run Code Online (Sandbox Code Playgroud)
这不会影响 的值b1。做:
final BigInteger b2 = b1.shiftLeft(33);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10191 次 |
| 最近记录: |