c语言中左移比乘法快吗,在C中使用移位运算符的乘法和除法实际上更快吗?

3e0d8f255eb05515b8a823d7c2bbf2cc.png

一只名叫tom的猫

只是一个具体的测量点:多年以前,我对哈希算法的两个版本进行了基准测试:unsignedhash( char const* s ){    unsigned h = 0;    while ( *s != '\0' ) {        h = 127 * h + (unsigned char)*s;        ++ s;    }    return h;}和unsignedhash( char const* s ){    unsigned h = 0;    while ( *s != '\0' ) {        h = (h << 7) - h + (unsigned char)*s;        ++ s;    }    return h;}在我对其进行基准测试的每台机器上,第一台至少和第二台一样快。令人惊讶的是,有时速度更快(例如在Sun Sparc上)。当硬件不支持快速乘法(大多数都不支持快速乘法)时,编译器会将乘法转换为移位和加/减的适当组合。而且由于它知道最终目标,因此有时可以用比您明确地编写班次和加/减的方式少的指令来实现。请注意,这就像15年前。希望从那时起,编译器只会变得更好,因此您可以指望编译器做正确的事情,可能比您做的更好。(此外,代码看起来如此“ C”的原因是因为它已经超过15年了。std::string今天,我显然会使用和迭代器。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值