对比C与JAVA运算符效率的六点无法解释的现象

博主通过测试发现,C语言中乘法效率高于除法,而在JAVA中则是除法更快。此外,JAVA中将int类型改为long类型导致运算时间翻倍,而C语言无此现象。测试还显示,C编译器对取模运算进行了优化,但JAVA未进行此类优化,且JAVA中test %= 1的运算耗时远超其他取模操作。C-Free编译器在各种运算上的效率表现接近。这些现象引发对编程语言运算符效率优化的讨论。
摘要由CSDN通过智能技术生成

众所周知编程语言运算符的效率差异不小,今天博主对赋值运算,加法,减法,乘法,乘法,取模,位运算分别用C和JAVA进行了效率测试,产生了一些令我无法解释的测试结果,以此文章把问题记录下来,希望日后可以解决,也恭请各位大牛来帮忙,下面把我的测试出的问题罗列一下。

测试环境:CPU :i3-370M ;内存:4G; JAVA IDE:elipse ;C IDE:VC6.0,C-Free5.0。


问题一:到底是乘法效率高,还是除法效率高?

一些书籍记录乘法效率比除法效率高,比如对于浮点数m  /=  2 应该改写成m  *=  0.5于是我就做了如下的两个测试

C代码:

#include <stdio.h>
#include <time.h>

main(){ 
	long count = 100000000;
	float test = 1;
    int start_time, end_time;
  	
    start_time = clock();
    while(--count > 0)
    	test /= 2;
    end_time = clock();
    
    printf( "test /= 2耗时%d毫秒\n", (end_time - start_time));

    getchar(); 
} 
测试结果:平均在 600ms

当我们把测试代码test  /=  2 改为 test  *=  0.5

测试结果:平均在:520ms

符合我们的期望值


再来看看同样的代码在JAVA上运行:

public class FuHaoCeshi {

	public static void main(String[] args){
		int count = 100000000;
		long start_time = 0;
		long end_time = 0;
		float test = 1;
		start_time = System.currentTimeMillis();
		
		 while(--count > 0)
		    	test
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值