首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >5+5+5+5+5和5*5哪个更快?

5+5+5+5+5和5*5哪个更快?
EN

Stack Overflow用户
提问于 2011-01-21 18:45:13
回答 8查看 1.7K关注 0票数 3

我不知道该怎么问,只是想问一下。请帮我贴上标签。无论如何,我的朋友问我一个问题,在Java中哪个更快

代码语言:javascript
运行
复制
int a = 5 + 5 + 5 + 5 + 5

代码语言:javascript
运行
复制
int b = 5 * 5 ?

它依赖于语言吗?我的意思是,在java中,ab快,但在C++中就差了

我的答案是ab快,因为在计算机组织结构中比较加法/乘法

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-01-21 18:47:31

它依赖于平台(和编译器)。如果你需要知道,那就去测量它。你不太可能处于需要知道的情况下。

但是,在您的两个示例中,这些都将在编译时进行计算(因此不需要运行时计算);例如,请参阅http://en.wikipedia.org/wiki/Constant_folding

票数 14
EN

Stack Overflow用户

发布于 2011-01-21 18:52:41

在您的情况下,它不会改变任何事情。让我们编译一下:

代码语言:javascript
运行
复制
public class Toto {
    public static void main(String[] args) {
        int a = 5 + 5 + 5 + 5 + 5;
        int b = 5 * 5;
    }
}

并检查反编译结果:

代码语言:javascript
运行
复制
public class Toto
{
    public static void main(String args[])
    {
        byte byte0 = 25;
        byte byte1 = 25;
    }
}

编译器做了内联所有的事情。

票数 13
EN

Stack Overflow用户

发布于 2011-01-21 18:50:43

两者都是常量表达式,因此它们将简化为

代码语言:javascript
运行
复制
int a = 25;
int b = 25;

在编译时(100%确定,即使是玩具编译器也会这样做,因为这是最简单的优化之一)。

在远程情况下,这些操作不会被简化,假设有一个JIT以1:1的关系将乘法和加法操作码映射到它们的CPU指令对应物,在大多数现代体系结构中,所有整数算术操作通常需要相同数量的周期,因此乘一次将比加法四次更快(只要检查一下,加法仍然比乘法快:1个时钟对3个时钟,所以在这里使用乘法仍然是值得的)。

即使在超标量体系结构中,每个周期可以发出多条指令,加法操作链也具有数据依赖性,因此它们必须按顺序执行(并且由于加法指令只有1个周期,所以没有可能的流水线重叠,它仍然需要4个周期)。

在大多数中央处理器架构中,最优的指令序列可能是向左移动两个位置,然后添加原始值(5<<2+5)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4757848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档