相关疑难解决方法(0)

哪个是用于将整数除以2的更好选项?

以下哪种技术是将整数除以2的最佳选择,为什么?

技巧1:

x = x >> 1;
Run Code Online (Sandbox Code Playgroud)

技术2:

x = x / 2;
Run Code Online (Sandbox Code Playgroud)

x是一个整数.

c c++ optimization division micro-optimization

401
推荐指数
20
解决办法
6万
查看次数

是否比Java中的乘法和除法更快地移位?.净?

如果您恰好使用2的幂,则左右移位显然比大多数甚至所有CPU上的乘法和除法运算更快.但是,它可能会降低某些读取器和某些算法的代码清晰度.位移对于性能是否真的是必要的,或者我可以期望编译器或VM注意到这种情况并对其进行优化(特别是当2的幂是文字时)?我主要对Java和.NET行为感兴趣,但欢迎深入了解其他语言实现.

.net c# java optimization bit-manipulation

64
推荐指数
7
解决办法
3万
查看次数

快速Java优化问题

Eclipse编译器会自动将乘法乘以2的幂转换为位移,还是应该手动执行?谢谢您的帮助.

java eclipse compiler-construction optimization

9
推荐指数
2
解决办法
3489
查看次数

应该在Java字节码中看到乘法/移位优化

我一直在读,不需要进行移位,因为编译器的优化会将乘法转换为移位。例如我应该在Java中位移除以2吗?移位比Java中的乘法和除法快吗?。净?

我不是在这里询问性能差异,我可以自己测试一下。但是我认为很好奇的是,有几个人提到它将被“编译为同一件事”。这似乎是不正确的。我已经写了一小段代码。

private static void multi()
{
    int a = 3;
    int b = a * 2;
    System.out.println(b);
}

private static void shift()
{
    int a = 3;
    int b = a << 1L;
    System.out.println(b);
}
Run Code Online (Sandbox Code Playgroud)

给出相同的结果,并将其打印出来。

当我查看生成的Java字节码时,将显示以下内容。

private static void multi();
Code:
   0: iconst_3
   1: istore_0
   2: iload_0
   3: iconst_2
   4: imul
   5: istore_1
   6: getstatic     #4                  // Field java/lang/System.out:Ljava/io/PrintStream;
   9: iload_1
  10: invokevirtual #5                  // Method java/io/PrintStream.println:(I)V
  13: return

private static void shift();
Code:
   0: …
Run Code Online (Sandbox Code Playgroud)

java bytecode compilation

4
推荐指数
1
解决办法
211
查看次数