`

java中位移操作和乘法的区别

阅读更多

现代处理器应该把这两种计算法优化得都差不多了,可以从多种途径测试一下,看汇编码或者测试:

 

int arithmetic2 ( int aValue )
{
    return aValue * 2;
}

00000030 <arithmetic2>:
  30:   55                      push   %ebp
  31:   89 e5                   mov    %esp,%ebp
  33:   8b 45 08                mov    0x8(%ebp),%eax
  36:   5d                      pop    %ebp
  37:   01 c0                   add    %eax,%eax
  39:   c3                      ret    

int arithmetic3 ( int aValue )
{
    return aValue << 1;
}

00000040 <arithmetic3>:
  40:   55                      push   %ebp
  41:   89 e5                   mov    %esp,%ebp
  43:   8b 45 08                mov    0x8(%ebp),%eax
  46:   5d                      pop    %ebp
  47:   01 c0                   add    %eax,%eax
  49:   c3                      ret    

 

long starttime = System.currentTimeMillis();
for(long i = 0; i < 1000000000; i++) {
    int x = 100 << 2;
}
long endtime = System.currentTimeMillis();
System.out.println(endtime - starttime);
        
long starttime = System.currentTimeMillis();
for(long i = 0; i < 1000000000; i++) {
    int x = 100 * 2;
}
long endtime = System.currentTimeMillis();
System.out.println(endtime - starttime);
 

时间越长越精确,当然这不能100%证明,但至少有一点,两个整数的乘法可以转换为位移操作和加法的组合,而加法和位移操作速度是没有区别的

 

int c = 0;
int b = 7;
int a = 5;
	    
while(b!=0) {
    if((b & 1) != 0) {
        c = c + a;
        a <<= 1;
        b >>= 1;
    }
}
	    
System.out.println(c);
 

 

分享到:
评论

相关推荐

    有限单元法求解跨中的位移java实现

    本项目是通过Java编程语言实现的,旨在计算跨中的位移,具体涉及到矩阵运算和线性代数的概念。 在有限单元法中,一个复杂的结构被划分为多个简单的单元,每个单元的特性可以通过其几何形状和材料属性来定义。然后,...

    EDA八位乘法的java实现

    八位乘法在计算机科学中是非常基础且重要的操作,特别是在处理数字逻辑和嵌入式系统时。在这个实验中,学生喻琴仪通过学习不同的软件工具和技术,如ispEXPERT/MAX+plus Ⅱ/Foudation Series,GW48-CK EDA 实验开发...

    数据结构中的大数乘法

    为了实现大数的加法和乘法,我们需要设计合适的逻辑来处理进位和位移操作。在进行大数乘法时,需要遍历每一个位,然后对每一位进行乘法和累加操作,最后再处理可能的溢出。 在描述中提到的"200位以上的数据的加法...

    Java操作符的优先级和结合性

    在Java编程语言中,操作符的优先级和结合性是理解和编写正确代码的关键部分。它们决定了表达式的计算顺序,帮助开发者避免潜在的错误。本文将详细介绍Java中的操作符优先级和结合性规则。 首先,操作符的优先级是指...

    Java语言中的操作符及操作符的优先级[借鉴].pdf

    Java语言中的操作符是编程语法的重要组成部分,它们用于执行各种计算和逻辑判断。理解操作符的用法和优先级对于编写高效、准确的代码至关重要。本文将详细解析Java中的主要操作符及其应用。 首先,我们来看算术操作...

    大整数乘法(本人初学)

    在这个Java程序中,我们看到的是一个实现大整数乘法的简单版本。程序的主要目标是接收用户输入的大整数,然后通过分组乘法的方法计算它们的乘积。以下是程序中涉及的关键知识点: 1. **大整数表示**:由于Java的`...

    Java+Android面试题大全

    8. 效率最高的乘法运算:在Java中,位移运算通常比算术运算更为高效。乘以8可以通过左移三位来实现,即2 相当于2 * 2 * 2 * 2 * 2 * 2 * 2,这样做是CPU直接支持的位运算,比普通的乘法运算要快。 9. 编程中的大数...

    JAVA基础之java的移位运算

    Java的移位运算涉及到整数类型数据的二进制位操作,这对于理解计算机底层运作和优化代码至关重要。移位运算主要包括左移运算符()和右移运算符(&gt;&gt;,&gt;&gt;&gt;)。在Java中,所有的整数类型(除了char类型外)都是有符号...

    java 的FFT源程序

    这个运算涉及复数的加法、乘法和位移,它是FFT效率的关键。在Java代码中,会有一个循环结构来执行这些运算,每次迭代都会更新部分结果。 5. **位翻转**:在计算FFT时,输入数据需要根据其位反序。这是因为FFT是基于...

    RSA-IMPLEMENTATION-IN-JAVA.zip_in_java_rsa java

    1. **Binary.java**: 这个文件可能包含了二进制操作的辅助类,因为RSA算法涉及到大量的位运算,比如大整数的二进制表示、位移操作等。二进制操作是RSA算法的基础,因为加密和解密过程中,原始数据通常会被转换为二...

    2013java面试宝典

    8. 计算`2 * 8`最有效率的方式是直接使用`2 ,利用位移运算符进行快速乘法。 9. 设计一个能处理一百亿的计算器,需要考虑大数运算,可以使用`BigInteger`类处理大整数,并确保计算器的精度和性能。 10. 使用`final...

    FFT.rar_FFT多项式乘积_fft java_java fft

    标题中的"FFT.rar_FFT多项式乘积_fft java_java fft"揭示了我们即将探讨的核心主题:快速傅里叶变换(FFT)在计算多项式乘法中的应用,以及它与Java编程语言的结合。FFT是一种高效的算法,用于计算离散傅里叶变换...

    柯莱特Java面试题收集

    - **知识点概述**:最高效的乘法运算之一是使用位移操作,如`2 表示2乘以8,这是因为位移操作是由CPU直接支持的,效率非常高。 ### 9. 设计一个百亿级别的计算器 - **知识点概述**: - 这一问题考察的是开发者对...

    java最新面试(公司)

    - **替换乘法运算**: 在某些情况下,使用位移操作代替乘法运算可以提高效率。 - **一致的编程风格**: 保持代码风格的一致性有助于提高可读性和维护性。 以上知识点涵盖了Java面试中常见的技术点,对于准备面试或者...

    java的习题

    在Java编程语言中,我们经常会遇到各种编程概念和实践,如异常处理、字符操作、数值计算、循环控制以及位运算。下面将详细解释这些知识点。 1. 异常处理: 在给定的代码中,异常处理是通过`try-catch`块实现的。当...

    Java面试葵花宝典-打印.doc

    Java 中的变量可以分为基本类型和引用类型两种。基本类型包括整数类型、浮点数类型、字符类型、布尔类型等。引用类型包括数组、字符串、类等。 在 Java 中,基本类型包括: * 整数类型:byte、short、int、long * ...

    java面试葵花宝典

    8. **高效计算2乘以8**:最有效率的方法是使用位操作,如`2 或`2 * (1 )`,因为位移操作通常比乘法更快。 9. **设计百亿计算器**:设计大整数计算器要考虑内存管理、性能优化,可能需要自定义大数运算类,实现加减...

    JAVA开发基于Misty1算法的加密软件(JAVA)的实现(源代码+论文).zip

    在Java中,可以使用位移运算符`&gt;&gt;&gt;`和`来实现行移位,使用异或操作符`^`来实现列混淆。 5. **轮密钥加** 轮密钥加是将密钥与当前轮的中间结果进行异或,增加算法的不可预测性。在Java中,这可以通过简单的异或操作...

    java运算符优先级[借鉴].pdf

    Java语言中的运算符优先级是指在Java语言中各种运算符的执行顺序和结合性。了解Java运算符优先级是非常重要的,因为它可以帮助我们正确地编写Java程序,避免一些常见的错误。 以下是Java运算符优先级的详细列表: ...

    java 性能优化

    在循环计算中,用位移操作替换乘法或除法运算,如`val 等同于`val * 8`,而`val &gt;&gt; 1`等同于`val / 2`。位移操作更快速,但可能降低代码可读性,建议添加注释说明。 #### 二、J2EE篇:特定于JSP、EJB或JDBC的优化...

Global site tag (gtag.js) - Google Analytics