面试时没有回答出来C的问题,各位看一下

xuexivcxiao 2009-07-14 09:50:44
int x,y;
y=50*x;
这两条语句执行速度太慢,能不能想办法加速一下,各位看看怎么解决?
...全文
868 138 打赏 收藏 转发到动态 举报
写回复
用AI写文章
138 条回复
切换为时间正序
请发表友善的回复…
发表回复
ht_61743904 2009-10-17
  • 打赏
  • 举报
回复
15楼正解
yuanwenqun2 2009-10-17
  • 打赏
  • 举报
回复
又长见识了
zbihong 2009-10-17
  • 打赏
  • 举报
回复
学习了!!!!!
ameigame 2009-10-17
  • 打赏
  • 举报
回复
这种题是常见的面试题吗
zzyjsjcom 2009-10-17
  • 打赏
  • 举报
回复
看计算机原理,cpu对乘法的处理方式
--- 这个东西跟计算机原理 有什么关系


位运算 给大家推荐一本书: 《hacker's delight》 专门研究位运算算法的

有人说这样会影响可读性 ,确实是的, 但是这个是针对应用层面来说的,因为应用层面处理逻辑比较复杂一点
liweiwu032 2009-10-17
  • 打赏
  • 举报
回复
牛人真多
北辰猫咪 2009-10-17
  • 打赏
  • 举报
回复
学习
uestcshe 2009-10-17
  • 打赏
  • 举报
回复
学习了
ChRedfield 2009-10-17
  • 打赏
  • 举报
回复
马克 学习
恺风 2009-10-17
  • 打赏
  • 举报
回复
移位加上加法应不会以普通乘法快,现在机器运算能力都高,用任何小技巧不仅容易出错,而且使得程序阅读性降低都是得不偿失的。应该仍然使用原来的写法。如果是我,我就这么说。
zhongfei5006 2009-10-17
  • 打赏
  • 举报
回复
看了一遍 顶下维护美德
小小攻城师 2009-10-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 supermegaboy 的回复:]
引用 2 楼 goodname 的回复:
y=x < <5+x < <4+x < <1;//看起来也挺多的,不知道效率咋样。


应该就是这样了,再加个register:


register int x, y;
.....
y = x < < 5 + x < < 4 + x < < 1;
........
[/Quote]

不错不错学习了
平凡的思想者 2009-10-16
  • 打赏
  • 举报
回复
用寄存器变量加位移操作应该是最快的。
十八道胡同 2009-10-16
  • 打赏
  • 举报
回复
位运算应该比乘法快些
long567 2009-10-16
  • 打赏
  • 举报
回复
要加括号 优先级
ForestDB 2009-10-16
  • 打赏
  • 举报
回复
主要还是看使用的领域吧,在分秒必争的地方,把乘法改成加法和移位的组合,确实能省不少CPU时钟;
但是在逻辑比较重要的地方,还是写50 * x比较好,更甚者,需要你写出如下类似的代码,保证逻辑的清晰和代码的弹性:
#define FOO 50
y = x * FOO;
kxalpah 2009-10-16
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

#define NUM 100000000

int main()
{
clock_t time1,time2;
double s1,s2;
int x = 10;
int y;
int i;
time1 = clock();
for(i = 0;i<= NUM;i++)
{
y = 50*x;
}
time2 = clock();

s1 = (double)(time2 - time1)/CLOCKS_PER_SEC;

time1 = clock();
for(i = 0;i<= NUM;i++)
{
y = (x << 5) + (x << 4) + (x<<1);
}
time2 = clock();

s2 = (double)(time2 - time1)/CLOCKS_PER_SEC;

printf("first is %lf\nsecond is %lf\n",s1,s2);
system("PAUSE");
return 0;
}
乘法的结果为0.453
位移的结果为0.378
threeleafzerg007 2009-10-16
  • 打赏
  • 举报
回复
50 = 32 + 16 + 2

y = x<<5 + x<<4 + x<<1;
ritian89 2009-10-16
  • 打赏
  • 举报
回复
y=50*x=x <<5+x <<4+x <<1;
kxalpah 2009-10-16
  • 打赏
  • 举报
回复
用位移,好方法
加载更多回复(118)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧