加减乘除及位运算的快慢程度

public class demo{
   
    public void funAdd() {
        long i1=System.currentTimeMillis();
        int sum=0;
         for(int i=0;i<1000000000;i++) {
            sum+=i; 
         }
         System.out.println(System.currentTimeMillis()-i1);
    }

    public void funMuplate() {
        long i1=System.currentTimeMillis();
        int sum=1;
         for(int i=1;i<1000000001;i++) {
            sum*=i; 
         }
         System.out.println(System.currentTimeMillis()-i1);
    }
    
    public void funMuplate1() {
        long i1=System.currentTimeMillis();
        int sum=512;
        for(long i=0;i<1000000000;i++) {
             sum=sum<<2;
             }
         System.out.println(System.currentTimeMillis()-i1);
    }

    public void funMuplate2() {
        long i1=System.currentTimeMillis();
        int sum=512;
        for(long i=0;i<1000000000;i++) {
         sum=sum*4;
         }
         System.out.println(System.currentTimeMillis()-i1);
    }
    
    public static void main(String []args) {
       new demo().funAdd();
       new demo().funMuplate();
       new demo().funMuplate1();
       new demo().funMuplate2();
   }

}

 

结果:

结果证明:T

加(减)所用时间<乘(除)所用时间

位运算所用时间<乘(除)所用时间(一般情况下)

原因如下:

【加法】:

指令             指令周期

adc 寄存器, 立即数      1

adc 寄存器, 寄存器      1

adc 寄存器, 内存       2

adc 内存,   立即数      3

adc 内存,   寄存器      3

 

add 寄存器, 立即数      1

add 寄存器, 寄存器      1

add 寄存器, 内存       2

add 内存, 立即数       3

add 内存, 寄存器       3

 

inc 寄存器          1

inc 内存           3

 

【减法】:

dec 寄存器          1

dec 内存           3

 

sub 寄存器, 立即数      1

sub 寄存器, 寄存器      1

sub 寄存器, 内存       2

sub 内存, 立即数       3

sub 内存, 寄存器       3

 

sbb 寄存器, 立即数      1

sbb 寄存器, 寄存器      1

sbb 寄存器, 内存       2

sbb 内存, 立即数       3

sbb 内存, 寄存器       3

 

【乘法】:

imul 寄存器         11

imul 内存          11

imul 寄存器, 寄存器, 立即数 10

imul 寄存器, 立即数     10

imul 寄存器, 内存, 立即数  10

imul 寄存器, 寄存器     10

imul 寄存器, 内存      10

 

mul 8位寄存器        11

mul 16位寄存器        11

mul 32位寄存器        10

mul 8位内存         11

mul 16位内存         11

mul 32位内存         10

 

【除法】:

div 8位寄存器        17

div 16位寄存器        25

div 32位寄存器        41

div 8位内存         17

div 16位内存         25

div 32位内存         41

 

idiv 8位寄存器        22

idiv 16位寄存器       30

idiv 32位寄存器       46

idiv 8位内存         30

idiv 16位内存        30

idiv 32位内存        46

由此可见,CPU计算加减法的速度跟位运算(与、或、非、异或)相当,乘法的速度比加减法慢近10倍,除法的速度比加减法慢(近20倍——8位,近30倍——16位,40倍以上——32位)。算加减法,读取内存数据的比不读内存数据的慢,写内存的比读内存的慢。

 

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值